AirGun

AirGun is a Python library which is build over Widgetastic and navmazing to make Satellite 6 UI testing easier.

AirGun is written in Python 3 and do not plan to support Python 2. AirGun supports Satellite 6.4 and above and Foreman 1.17 and above (with vertical navigation).

This page provides a summary of information about AirGun.

More in-depth coverage is provided in other sections.

Building documentation locally

To build documentation locally, use:

pip install -r requirements-optional.txt
make docs-html

You might also try to run spell check:

pip install -r requirements-optional.txt
make docs-spelling

API Reference

This page contains auto-generated API reference documentation 1.

airgun

Subpackages

airgun.entities
Subpackages
airgun.entities.rhai
Submodules
airgun.entities.rhai.action
Module Contents
Classes

ActionEntity

ActionDetails

Navigate to Red Hat Access Insights Actions screen.

class airgun.entities.rhai.action.ActionEntity(browser)
endpoint_path = /redhat_access/insights/actions
read(widget_names=None)

Read the content of the view.

class airgun.entities.rhai.action.ActionDetails(obj, navigate_obj, logger=None)

Navigate to Red Hat Access Insights Actions screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.rhai.base
Module Contents
Classes

InsightsNavigateStep

AirGun's version of navmazing.NavigateStep with custom

exception airgun.entities.rhai.base.InsightsOrganizationPageError

Raised when navigating to insight plugin pages and the organization is not selected or the current selected organization has no manifest.

class airgun.entities.rhai.base.InsightsNavigateStep(obj, navigate_obj, logger=None)

AirGun’s version of navmazing.NavigateStep with custom implementations of navmazing.NavigateStep.am_i_here and navmazing.NavigateStep.go and ability to work with views.

post_navigate(_tries, *args, **kwargs)

Raise Error if Destination view is not displayed or Organization Error page is displayed.

airgun.entities.rhai.inventory
Module Contents
Classes

InventoryHostEntity

AllHosts

Navigate to Insights Inventory screen.

HostDetails

Navigate to Insights Inventory screen.

class airgun.entities.rhai.inventory.InventoryHostEntity(browser)
endpoint_path = /redhat_access/insights/inventory
property total_systems

Get number of all systems.

search(host_name)

Search a certain host.

read(entity_name, widget_names=None)

Read host details, optionally read only the widgets in widget_names.

class airgun.entities.rhai.inventory.AllHosts(obj, navigate_obj, logger=None)

Navigate to Insights Inventory screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.rhai.inventory.HostDetails(obj, navigate_obj, logger=None)

Navigate to Insights Inventory screen.

Parameters

entity_name – hostname

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.rhai.manage
Module Contents
Classes

ManageEntity

ManageDetails

Navigate to Red Hat Access Insights Manage screen.

class airgun.entities.rhai.manage.ManageEntity(browser)
endpoint_path = /redhat_access/insights/manage
_toggle_service(state)
enable_service()

Enable the service.

disable_service()

Disable the service.

read(widget_names=None)

Read the content of the view.

class airgun.entities.rhai.manage.ManageDetails(obj, navigate_obj, logger=None)

Navigate to Red Hat Access Insights Manage screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.rhai.overview
Module Contents
Classes

OverviewEntity

OverviewDetails

AirGun's version of navmazing.NavigateStep with custom

class airgun.entities.rhai.overview.OverviewEntity(browser)
endpoint_path = /redhat_access/insights
read(widget_names=None)
class airgun.entities.rhai.overview.OverviewDetails(obj, navigate_obj, logger=None)

AirGun’s version of navmazing.NavigateStep with custom implementations of navmazing.NavigateStep.am_i_here and navmazing.NavigateStep.go and ability to work with views.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.rhai.plan
Module Contents
Classes

PlanEntity

AllPlans

Navigate to Insights Planner screen.

AddPlan

Navigate to Insights Plan builder screen.

PlanDetails

Navigate to Insights plan details screen.

class airgun.entities.rhai.plan.PlanEntity(browser)
endpoint_path = /redhat_access/insights/planner
create(name, rules)

Create a new RHAI Plan entity.

delete(entity_name)

Delete RHAI Plan entity.

update(entity_name, values)

Update RHAI Plan entity.

run_playbook(entity_name, customize=False, customize_values=None)

Run Ansible playbook associated with given plan

Parameters
  • entity_name (str) – Name of plan

  • customize (bool) – Whether remote job should be customized first

  • customize_values (dict) – Values to fill on customize remote job screen

download_playbook(entity_name)

Download Ansible playbook associated with given plan

Parameters

entity_name (str) – Name of plan

export_csv(entity_name)

Download CSV file with details of given plan

Parameters

entity_name (str) – Name of plan

class airgun.entities.rhai.plan.AllPlans(obj, navigate_obj, logger=None)

Navigate to Insights Planner screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.rhai.plan.AddPlan(obj, navigate_obj, logger=None)

Navigate to Insights Plan builder screen.

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.rhai.plan.PlanDetails(obj, navigate_obj, logger=None)

Navigate to Insights plan details screen.

Parameters

entity_name – plan name

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.rhai.rule
Module Contents
Classes

RuleEntity

RulesDetails

Navigate to Red Hat Access Insights Rules screen.

class airgun.entities.rhai.rule.RuleEntity(browser)
endpoint_path = /redhat_access/insights/rules
search(rule_name)

Perform the search of a rule.

class airgun.entities.rhai.rule.RulesDetails(obj, navigate_obj, logger=None)

Navigate to Red Hat Access Insights Rules screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

Submodules
airgun.entities.activationkey
Module Contents
Classes

ActivationKeyEntity

ShowAllActivationKeys

Navigate to All Activation Keys page

AddNewActivationKey

Navigate to New Activation Key page

EditExistingActivationKey

Navigate to Edit Activation Key page

class airgun.entities.activationkey.ActivationKeyEntity(browser)
endpoint_path = /activation_keys
create(values)

Create new activation key entity

delete(entity_name)

Remove existing activation key entity

search(value)

Search for activation key

read(entity_name, widget_names=None)

Read all values for created activation key entity

update(entity_name, values)

Update necessary values for activation key

add_subscription(entity_name, subscription_name)

Add subscription to activation key

Parameters
  • entity_name – Activation key name

  • subscription_name – Name of subscription to be added to activation key

add_host_collection(entity_name, hc_name)

Add host collection to activation key

Parameters
  • entity_name – Activation key name

  • hc_name – Name of host collection to be added to activation key

remove_host_collection(entity_name, hc_name)

Remove host collection from activation key

Parameters
  • entity_name – Activation key name

  • hc_name – Name of host collection to be removed from activation key

class airgun.entities.activationkey.ShowAllActivationKeys(obj, navigate_obj, logger=None)

Navigate to All Activation Keys page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.activationkey.AddNewActivationKey(obj, navigate_obj, logger=None)

Navigate to New Activation Key page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.activationkey.EditExistingActivationKey(obj, navigate_obj, logger=None)

Navigate to Edit Activation Key page

Parameters

entity_name – name of the activation key

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.ansible_role
Module Contents
Classes

AnsibleRolesEntity

Main Ansible roles entity

ShowAllRoles

Navigate to the Ansible Roles page

ImportAnsibleRole

Navigate to the Import Roles page

class airgun.entities.ansible_role.AnsibleRolesEntity(browser)

Main Ansible roles entity

endpoint_path = /ansible/ansible_roles
search(value)

Search for existing Ansible Role

delete(entity_name)

Delete Ansible Role from Satellite

property imported_roles_count

Return the number of Ansible roles currently imported into Satellite

import_all_roles()

Import all available roles and return the number of roles that were available at import time

class airgun.entities.ansible_role.ShowAllRoles(obj, navigate_obj, logger=None)

Navigate to the Ansible Roles page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.ansible_role.ImportAnsibleRole(obj, navigate_obj, logger=None)

Navigate to the Import Roles page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.ansible_variable
Module Contents
Classes

AnsibleVariablesEntity

Main Ansible variables entity

ShowAllVariables

Navigate to Ansible Variables page

NewAnsibleVariable

Navigate to Create Ansible Variable page

class airgun.entities.ansible_variable.AnsibleVariablesEntity(browser)

Main Ansible variables entity

endpoint_path = /ansible/ansible_variables
search(value)

Search for existing Ansible variable

delete(entity_name)

Delete Ansible variable from Satellite

read_total_variables()

Returns the number of Ansible variables currently in Satellite

create(values)

Create a new Ansible variable with minimum inputs

create_with_overrides(values)

Create a new Ansible variable that is managed by Satellite

class airgun.entities.ansible_variable.ShowAllVariables(obj, navigate_obj, logger=None)

Navigate to Ansible Variables page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.ansible_variable.NewAnsibleVariable(obj, navigate_obj, logger=None)

Navigate to Create Ansible Variable page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.architecture
Module Contents
Classes

ArchitectureEntity

ShowAllArchitectures

Navigate to All Architectures page

AddNewArchitecture

Navigate to Create Architecture page

EditArchitecture

Navigate to Edit Architecture page

class airgun.entities.architecture.ArchitectureEntity(browser)
endpoint_path = /architectures
create(values)

Create new architecture entity

search(value)

Search for architecture entity

read(entity_name, widget_names=None)

Read all values for created architecture entity

update(entity_name, values)

Update necessary values for architecture

delete(entity_name)

Remove existing architecture entity

class airgun.entities.architecture.ShowAllArchitectures(obj, navigate_obj, logger=None)

Navigate to All Architectures page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.architecture.AddNewArchitecture(obj, navigate_obj, logger=None)

Navigate to Create Architecture page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.architecture.EditArchitecture(obj, navigate_obj, logger=None)

Navigate to Edit Architecture page

Parameters

entity_name – name of the architecture

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.audit
Module Contents
Classes

AuditEntity

ShowAllAuditEntries

Navigate to Audit screen that contains all log entries

class airgun.entities.audit.AuditEntity(browser)
endpoint_path = /audits
search(value)

Search for audit entry in logs and return first one from the list

class airgun.entities.audit.ShowAllAuditEntries(obj, navigate_obj, logger=None)

Navigate to Audit screen that contains all log entries

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.base
Module Contents
Classes

BaseEntity

class airgun.entities.base.BaseEntity(browser)
HELPER_CLASS
property helper
create_bookmark(values, search_query=None)

Create a bookmark.

Parameters
  • values (dict) – dictionary with keys ‘name’, ‘query’, ‘public’

  • search_query (str optional) – a query to type into searchbox if needed. Such query will be automatically populated as ‘query’ field for bookmark

airgun.entities.bookmark
Module Contents
Classes

BookmarkEntity

ShowAllBookmarks

Navigate to All Bookmarks screen.

EditBookmark

Navigate to Edit Bookmark screen.

Functions

_gen_queries(entity_name[, controller])

Generate search query and row filtering query from bookmark name and

airgun.entities.bookmark._gen_queries(entity_name, controller=None)

Generate search query and row filtering query from bookmark name and controller if passed.

class airgun.entities.bookmark.BookmarkEntity(browser)
endpoint_path = /bookmarks
delete(entity_name, controller=None)

Delete existing bookmark

search(query)

Search for bookmark

read(entity_name, controller=None, widget_names=None)

Read bookmark values

update(entity_name, values, controller=None)

Update existing bookmark

class airgun.entities.bookmark.ShowAllBookmarks(obj, navigate_obj, logger=None)

Navigate to All Bookmarks screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.bookmark.EditBookmark(obj, navigate_obj, logger=None)

Navigate to Edit Bookmark screen.

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Using a given entity_name, navigate to edit page from prerequisite

Parameters
  • entity_name – name of bookmark

  • controller – (optional) name of controller for bookmark

airgun.entities.cloud_insights
Module Contents
Classes

CloudInsightsEntity

SaveCloudTokenView

Navigate to main Red Hat Insights page

ShowCloudInsightsView

Navigate to main Red Hat Insights page

RunJob

Navigate to Job Invocation screen.

class airgun.entities.cloud_insights.CloudInsightsEntity(browser)
endpoint_path = /foreman_rh_cloud/insights_cloud
search(value)

Search for ‘query’ and return matched hostnames/recommendations.

Parameters

value – text to filter (default: no filter)

remediate(entity_name)

Remediate hosts based on search input.

sync_hits()

Sync RH Cloud - Insights recommendations.

read(widget_names=None)

Read all values for created activation key entity

save_token_sync_hits(value)

Update Insights cloud view.

update(values)

Update RH Cloud - Insights view.

run_job()

Run remediation job

class airgun.entities.cloud_insights.SaveCloudTokenView(obj, navigate_obj, logger=None)

Navigate to main Red Hat Insights page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.cloud_insights.ShowCloudInsightsView(obj, navigate_obj, logger=None)

Navigate to main Red Hat Insights page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.cloud_insights.RunJob(obj, navigate_obj, logger=None)

Navigate to Job Invocation screen.

VIEW
airgun.entities.cloud_inventory
Module Contents
Classes

CloudInventoryEntity

ShowCloudInventoryListView

Navigate to main Inventory Upload page

class airgun.entities.cloud_inventory.CloudInventoryEntity(browser)
endpoint_path = /foreman_rh_cloud/inventory_upload
read(entity_name=None, widget_names=None)
configure_cloud_connector()

Configure Cloud Connector

is_cloud_connector_configured()

Check if Cloud Connector is configured

sync_inventory_status()

Sync Inventory status

generate_report(entity_name)
download_report(entity_name)
update(values)

Update Inventory Upload view.

class airgun.entities.cloud_inventory.ShowCloudInventoryListView(obj, navigate_obj, logger=None)

Navigate to main Inventory Upload page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.computeprofile
Module Contents
Classes

ComputeProfileEntity

ShowAllComputeProfiles

Navigate to All Compute Profiles page

AddNewComputeProfile

Navigate to Create Compute Profile page

RenameComputeProfile

Navigate to Edit Compute Profile page that basically does rename only

ListComputeResources

Navigate to list of Compute Resources for particular Compute Profile

class airgun.entities.computeprofile.ComputeProfileEntity(browser)
endpoint_path = /compute_profiles
create(values)

Create new compute profile entity

search(value)

Search for compute profile entity and return table row that contains that entity

rename(old_name, new_name)

Rename specific compute profile

delete(entity_name)

Delete specific compute profile

list_resources(entity_name)

List of compute resources that applied to specific compute profile

class airgun.entities.computeprofile.ShowAllComputeProfiles(obj, navigate_obj, logger=None)

Navigate to All Compute Profiles page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.computeprofile.AddNewComputeProfile(obj, navigate_obj, logger=None)

Navigate to Create Compute Profile page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.computeprofile.RenameComputeProfile(obj, navigate_obj, logger=None)

Navigate to Edit Compute Profile page that basically does rename only

Parameters

entity_name – name of the compute profile to be renamed

VIEW
am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.computeprofile.ListComputeResources(obj, navigate_obj, logger=None)

Navigate to list of Compute Resources for particular Compute Profile

Parameters

entity_name – name of the compute profile to be listed

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.computeresource
Module Contents
Classes

ComputeResourceEntity

ShowAllComputeResources

AirGun's version of navmazing.NavigateStep with custom

AddNewComputeResource

AirGun's version of navmazing.NavigateStep with custom

EditExistingComputeResource

AirGun's version of navmazing.NavigateStep with custom

ComputeResourceDetail

AirGun's version of navmazing.NavigateStep with custom

ComputeResourceProfileDetail

AirGun's version of navmazing.NavigateStep with custom

ComputeResourceVMImport

AirGun's version of navmazing.NavigateStep with custom

ComputeResourceImageProvider

Base class for image create and edit views, that need to dynamically define the view type

ComputeResourceImageCreate

Base class for image create and edit views, that need to dynamically define the view type

ComputeResourceImageEdit

Base class for image create and edit views, that need to dynamically define the view type

class airgun.entities.computeresource.ComputeResourceEntity(browser)
endpoint_path = /compute_resources
create(values)

Create new compute resource entity

search(value)

Search for compute resource entity and return table row that contains that entity

edit(name, values)

Edit specific compute resource values

read(entity_name, widget_names=None)

Read all values for existing compute resource entity

delete(value)

Delete specific compute profile

list_vms(entity_name, expected_vm_name=None)

Returns all the VMs on the CR or VM with specified name

search_virtual_machine(entity_name, value)

Search for compute resource virtual machine.

Parameters
  • entity_name (str) – The compute resource name.

  • value (str) – The value to put in virtual machine tab search box.

Returns

The Compute resource virtual machines table rows values.

vm_status(entity_name, vm_name)

Returns True if the machine is running, False otherwise

vm_poweron(entity_name, vm_name)

Starts the specified VM

vm_poweroff(entity_name, vm_name)

Stops the specified VM

vm_import(entity_name, vm_name, hostgroup, location)

Imports the specified VM

update_computeprofile(entity_name, compute_profile, values)

Update specific compute profile attributes through CR detail view

read_computeprofile(entity_name, compute_profile, widget_names=None)

Read specific compute profile attributes through CR detail view

create_image(entity_name, values)

Create a compute resource image.

Parameters
  • entity_name (str) – The compute resource name

  • values (dict) – The image properties

search_images(entity_name, value)

Search for compute resource images.

Parameters
  • entity_name (str) – The compute resource name.

  • value (str) – The value to put in images tab search box.

Returns

The Compute resource images table rows values.

read_image(entity_name, image_name, widget_names=None)

Read from compute resource image edit view.

Parameters
  • entity_name (str) – The compute resource name.

  • image_name (str) – The existing compute resource image name to read.

Returns

The edit view widgets values

update_image(entity_name, image_name, values)

Update compute resource image properties.

Parameters
  • entity_name (str) – The compute resource name.

  • image_name (str) – The existing compute resource image name to update

  • values (dict) – The image new properties.

delete_image(entity_name, image_name)

Delete compute resource image.

Parameters
  • entity_name (str) – The compute resource name.

  • image_name (str) – The existing compute resource image name to delete.

class airgun.entities.computeresource.ShowAllComputeResources(obj, navigate_obj, logger=None)

AirGun’s version of navmazing.NavigateStep with custom implementations of navmazing.NavigateStep.am_i_here and navmazing.NavigateStep.go and ability to work with views.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.computeresource.AddNewComputeResource(obj, navigate_obj, logger=None)

AirGun’s version of navmazing.NavigateStep with custom implementations of navmazing.NavigateStep.am_i_here and navmazing.NavigateStep.go and ability to work with views.

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.computeresource.EditExistingComputeResource(obj, navigate_obj, logger=None)

AirGun’s version of navmazing.NavigateStep with custom implementations of navmazing.NavigateStep.am_i_here and navmazing.NavigateStep.go and ability to work with views.

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

post_navigate(_tries, *args, **kwargs)

Select Compute resource tab for initialization

am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

class airgun.entities.computeresource.ComputeResourceDetail(obj, navigate_obj, logger=None)

AirGun’s version of navmazing.NavigateStep with custom implementations of navmazing.NavigateStep.am_i_here and navmazing.NavigateStep.go and ability to work with views.

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

class airgun.entities.computeresource.ComputeResourceProfileDetail(obj, navigate_obj, logger=None)

AirGun’s version of navmazing.NavigateStep with custom implementations of navmazing.NavigateStep.am_i_here and navmazing.NavigateStep.go and ability to work with views.

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.computeresource.ComputeResourceVMImport(obj, navigate_obj, logger=None)

AirGun’s version of navmazing.NavigateStep with custom implementations of navmazing.NavigateStep.am_i_here and navmazing.NavigateStep.go and ability to work with views.

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.computeresource.ComputeResourceImageProvider(obj, navigate_obj, logger=None)

Base class for image create and edit views, that need to dynamically define the view type (that depend from compute resource provider) before reaching navigation destination.

PROVIDER_VIEWS
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

class airgun.entities.computeresource.ComputeResourceImageCreate(obj, navigate_obj, logger=None)

Base class for image create and edit views, that need to dynamically define the view type (that depend from compute resource provider) before reaching navigation destination.

PROVIDER_VIEWS
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.computeresource.ComputeResourceImageEdit(obj, navigate_obj, logger=None)

Base class for image create and edit views, that need to dynamically define the view type (that depend from compute resource provider) before reaching navigation destination.

PROVIDER_VIEWS
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.configgroup
Module Contents
Classes

ConfigGroupEntity

ShowAllConfigGroups

Navigate to All Config Groups screen.

AddNewConfigGroup

Navigate to Create new Config Group screen.

EditConfigGroup

Navigate to Edit Config Group screen.

class airgun.entities.configgroup.ConfigGroupEntity(browser)
endpoint_path = /foreman_puppet/config_groups
create(values)

Create new config group

search(value)

Search for existing config group

read(entity_name, widget_names=None)

Read existing config group

update(entity_name, values)

Update config group

delete(entity_name)

Delete config group

class airgun.entities.configgroup.ShowAllConfigGroups(obj, navigate_obj, logger=None)

Navigate to All Config Groups screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.configgroup.AddNewConfigGroup(obj, navigate_obj, logger=None)

Navigate to Create new Config Group screen.

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.configgroup.EditConfigGroup(obj, navigate_obj, logger=None)

Navigate to Edit Config Group screen.

Parameters

entity_name – name of config group

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.containerimagetag
Module Contents
Classes

ContainerImageTagEntity

ShowAllContainerImageTags

Navigate to All Container Image Tags screen.

ContainerImageTagDetails

Navigate to Container Image Tag details page

class airgun.entities.containerimagetag.ContainerImageTagEntity(browser)
endpoint_path = /docker_tags
search(value)

Search for specific Container Image Tag

Parameters

value – search query to type into search field

Returns

container image tag that match

read(entity_name, widget_names=None)

Reads details of specific Container Image Tag

Parameters

entity_name – name of Container Image Tag

Returns

dict with properties of Container Image Tag

class airgun.entities.containerimagetag.ShowAllContainerImageTags(obj, navigate_obj, logger=None)

Navigate to All Container Image Tags screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.containerimagetag.ContainerImageTagDetails(obj, navigate_obj, logger=None)

Navigate to Container Image Tag details page

Args: entity_name: name of Container Image Tag

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.contentcredential
Module Contents
Classes

ContentCredentialEntity

ShowAllContentCredentials

Navigate to All Content Credentials page

AddNewContentCredential

Navigate to Create Content Credential page

EditContentCredential

Navigate to Content Credential details screen.

class airgun.entities.contentcredential.ContentCredentialEntity(browser)
endpoint_path = /content_credentials
create(values)

Create new content credentials entity

delete(entity_name)

Delete existing content credentials entity

search(value)

search for content credentials entity

read(entity_name, widget_names=None)

Read content credentials entity values

update(entity_name, values)

Update content credentials entity values

get_product_details(entity_name, product_name)

Get entity values for a product which associated to gpg key

Parameters
  • entity_name – Gpg key name

  • product_name – Name of associated product

class airgun.entities.contentcredential.ShowAllContentCredentials(obj, navigate_obj, logger=None)

Navigate to All Content Credentials page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.contentcredential.AddNewContentCredential(obj, navigate_obj, logger=None)

Navigate to Create Content Credential page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.contentcredential.EditContentCredential(obj, navigate_obj, logger=None)

Navigate to Content Credential details screen.

Parameters

entity_name – name of content credential to edit

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.contenthost
Module Contents
Classes

ContentHostEntity

ShowAllContentHosts

Navigate to All Content Hosts screen.

EditContentHost

Navigate to Content Host details screen.

NavigateToErrataDetails

Navigate to Errata details screen.

class airgun.entities.contenthost.ContentHostEntity(browser)
endpoint_path = /content_hosts
delete(entity_name)

Delete existing content host

search(value)

Search for specific content host

read_all(widget_names=None)

Read all values from content host title page. Optionally, read only the widgets in widget_names.

read(entity_name, widget_names=None)

Read content host details, optionally read only the widgets in widget_names.

execute_package_action(entity_name, action_type, value, installed_via='rex')

Execute remote package action on a content host.

The installation method is not set here, but the path changes according to the method used. For katello-agent, the Content Hosts’ Task tab displays the progress. If REX is used, the Job Invocation view displays the progress. In 6.10, REX became the default method.

Parameters
  • entity_name – content host name to remotely execute package action on

  • action_type – remote action to execute. Can be one of 5: ‘Package Install’, ‘Package Update’, ‘Package Remove’, ‘Group Install’ or ‘Group Remove’

  • value – Package or package group group name to remotely install/upgrade/remove (depending on action_type)

  • installed_via – what installation method was used (REX or katello-agent)

Returns

Returns a dict containing task status details

bulk_set_syspurpose(hosts, values)

Set system purpose for multiple hosts

execute_module_stream_action(entity_name, action_type, module_name, stream_version, customize=False, customize_values=None)

Execute remote module_stream action on a content

Parameters
  • entity_name – content host name

  • action_type – remote action to execute on content host. Action value can be one of them e.g. ‘Enable’, ‘Disable’, ‘Install’, ‘Update’, ‘Remove’, ‘Reset’

  • module_name – Module Stream name to remotely install/upgrade/remove (depending on action_type)

  • stream_version – String with Stream Version of Module

  • customize – Boolean indicating if additional custom action should be called

  • customize_values – Dict with custom actions to run. Mandatory if customize is True

Returns

Returns a dict containing job status details

search_package(entity_name, package_name)

Search for specific package installed in content host

search_module_stream(entity_name, module_name, stream_version=None, status='All')

Search for specific package installed in content host

install_errata(entity_name, errata_id, install_via=None)

Install errata on a content host

Parameters
  • name – content host name to apply errata on

  • errata_id – errata id or title, e.g. ‘RHEA-2012:0055’

  • install_via (str) – via which mean to install errata. Available options: “katello”, “rex”, “rex_customize”

Returns

Returns a dict containing task status details

search_errata(entity_name, errata_id, environment=None)

Search for specific errata applicable for content host.

Parameters
  • entity_name (str) – the content hosts name.

  • errata_id (str) – errata id or title, e.g. ‘RHEA-2012:0055’

  • environment (str optional) – lifecycle environment to filter by.

read_errata_details(entity_name, errata_id, environment=None)

Read Details for specific errata applicable for content host.

Parameters
  • entity_name (str) – the content hosts name.

  • errata_id (str) – errata id or title, e.g. ‘RHEA-2012:0055’

  • environment (str optional) – lifecycle environment to filter by.

export()

Export content hosts list.

Return str

path to saved file

add_subscription(entity_name, subscription_name)

Add a subscription to content host.

Parameters
  • entity_name (str) – the content hosts name.

  • subscription_name (str) – The subscription name to add to content host.

update(entity_name, values)

Update content host values.

class airgun.entities.contenthost.ShowAllContentHosts(obj, navigate_obj, logger=None)

Navigate to All Content Hosts screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.contenthost.EditContentHost(obj, navigate_obj, logger=None)

Navigate to Content Host details screen.

Parameters

entity_name – name of content host

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.contenthost.NavigateToErrataDetails(obj, navigate_obj, logger=None)

Navigate to Errata details screen.

Parameters
  • entity_name – name of content host

  • errata_id – id of errata

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.contentview
Module Contents
Classes

ContentViewEntity

ShowAllContentViews

Navigate to All Content Views screen.

AddNewContentView

Navigate to New Content View screen.

EditContentView

Navigate to Edit Content View screen.

DeleteContentView

Navigate to Delete Content View screen by selecting appropriate action

CopyContentView

Navigate to Copy Content View screen by selecting appropriate action in

PublishContentViewVersion

Navigate to Content View Publish screen.

PromoteContentViewVersion

Navigate to Content View Promote screen.

ContentViewVersionDetails

Navigate to Content View Version details screen.

RemoveContentViewVersion

Navigate to Content View Version removal screen by selecting

class airgun.entities.contentview.ContentViewEntity(browser)
endpoint_path = /legacy/content_views
create(values)

Create a new content view

delete(entity_name)

Delete existing content view

copy(entity_name, new_name)

Make a copy of existing content view

search(value)

Search for content view

read(entity_name, widget_names=None)

Read content view values, optionally only the widgets in widget_names will be read.

update(entity_name, values)

Update existing content view

add_yum_repo(entity_name, repo_name)

Add YUM repository to content view

add_docker_repo(entity_name, repo_name)

Add docker repository to content view

add_cv(entity_name, cv_name)

Add content view to selected composite content view.

add_ostree_repo(entity_name, repo_name)

Add OSTree repository to content view

remove_ostree_repo(entity_name, repo_name)

Remove OSTree repository from content view

publish(entity_name, values=None)

Publishes to create new version of CV and promotes the contents to ‘Library’ environment.

Returns

dict with new content view version table row; contains keys like ‘Version’, ‘Status’, ‘Environments’ etc.

promote(entity_name, version_name, lce_name)

Promotes the selected version of content view to given environment.

Returns

dict with new content view version table row; contains keys like ‘Version’, ‘Status’, ‘Environments’ etc.

read_version(entity_name, version_name, widget_names=None)

Read content view version values

search_version(entity_name, query)

Search for content view version

search_version_package(entity_name, version_name, query, repo=None)

Search for a package inside content view version

Parameters
  • entity_name (str) – content view name

  • version_name (str) – content view version name

  • query (str) – search query for content view version’s package

  • repo (str optional) – repository name to filter by

search_version_module_stream(entity_name, version_name, query, repo=None)

Search for a module stream inside content view version

Parameters
  • entity_name (str) – content view name

  • version_name (str) – content view version name

  • query (str) – search query for content view version’s module stream

  • repo (str optional) – repository name to filter by

remove_version(entity_name, version_name, completely=True, lces=None)

Remove content view version.

Parameters
  • entity_name (str) – content view name

  • version_name (str) – content view version name

  • completely (bool) – complete content view version removal if True or just disassociating from all lifecycle environments otherwise

  • lces (list optional) – list of lifecycle environment names to select on content view version removal screen

class airgun.entities.contentview.ShowAllContentViews(obj, navigate_obj, logger=None)

Navigate to All Content Views screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.contentview.AddNewContentView(obj, navigate_obj, logger=None)

Navigate to New Content View screen.

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.contentview.EditContentView(obj, navigate_obj, logger=None)

Navigate to Edit Content View screen.

Parameters

entity_name – name of content view

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.contentview.DeleteContentView(obj, navigate_obj, logger=None)

Navigate to Delete Content View screen by selecting appropriate action on Edit Content View screen.

Parameters

entity_name – name of content view

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.contentview.CopyContentView(obj, navigate_obj, logger=None)

Navigate to Copy Content View screen by selecting appropriate action in Content View Details screen.

Parameters

entity_name – name of content view

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.contentview.PublishContentViewVersion(obj, navigate_obj, logger=None)

Navigate to Content View Publish screen.

Parameters

entity_name – name of content view

VIEW
prerequisite(*args, **kwargs)

Open Content View first.

step(*args, **kwargs)

Dismiss alerts if present to uncover ‘Publish’ button, then click it.

class airgun.entities.contentview.PromoteContentViewVersion(obj, navigate_obj, logger=None)

Navigate to Content View Promote screen.

Parameters
  • entity_name – name of content view

  • version_name – name of content view version to promote

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.contentview.ContentViewVersionDetails(obj, navigate_obj, logger=None)

Navigate to Content View Version details screen.

Parameters
  • entity_name – name of content view

  • version_name – name of content view version

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.contentview.RemoveContentViewVersion(obj, navigate_obj, logger=None)

Navigate to Content View Version removal screen by selecting corresponding action in content view versions table.

Parameters
  • entity_name – name of content view

  • version_name – name of content view version to remove

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.contentview_new
Module Contents
Classes

NewContentViewEntity

ShowAllContentViewsScreen

Navigate to All Content Views screen.

CreateContentView

Navigate to Create content view.

class airgun.entities.contentview_new.NewContentViewEntity(browser)
endpoint_path = /content_views
create(values)

Create a new content view

search(value)

Search for content view

class airgun.entities.contentview_new.ShowAllContentViewsScreen(obj, navigate_obj, logger=None)

Navigate to All Content Views screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.contentview_new.CreateContentView(obj, navigate_obj, logger=None)

Navigate to Create content view.

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.contentviewfilter
Module Contents
Classes

ContentViewFilterEntity

ShowAllContentViewFilters

Navigate to All Content View Filters screen by proceeding through

AddNewContentViewFilter

Navigate to New Content View Filter screen.

EditContentViewFilter

Navigate to Edit Content View Filter screen.

class airgun.entities.contentviewfilter.ContentViewFilterEntity(browser)
create(cv_name, values)

Create a new content view filter

delete(cv_name, filter_name)

Delete existing content view filter

search(cv_name, value)

Search for content view filter

read(cv_name, filter_name, widget_names=None)

Read content view filter values

update(cv_name, filter_name, values)

Update content view filter.

Parameters
  • cv_name (str) – content view name

  • filter_name (str) – content view filter name

  • values (dict) – dictionary with new values

update_repositories(cv_name, filter_name, repositories=None)

Update affected by content view filter repositories.

Parameters
  • cv_name (str) – content view name

  • filter_name (str) – content view filter name

  • repositories (list optional) – list of affected repositories. If not provided - all repositories will be affected.

add_package_rule(cv_name, filter_name, rpm_name, architecture, version)

Add package rule to RPM content view filter.

Parameters
  • cv_name (str) – content view name

  • filter_name (str) – content view filter name

  • rpm_name (str) – affected package (RPM) name

  • architecture (str) – affected architecture

  • version (tuple) – tuple containing version values according to UI (e.g. (‘Equal To’, ‘5.21-1’) or (‘Range’, ‘4.1’, ‘4.6’)

_find_rpm_rules(table, rpm_name=None, architecture=None, version=None)

Form proper rpm rows list according to search criteria

Parameters
  • table – specify table where rows should be searched for

  • rpm_name – RPM package name

  • architecture – RPM architecture name

  • version – RPM version

Returns

rows list

update_package_rule(cv_name, filter_name, rpm_name, new_values, architecture=None, version=None)

Update package rule of RPM content view filter.

Parameters
  • cv_name (str) – content view name

  • filter_name (str) – content view filter name

  • rpm_name (str) – existing package (RPM) name

  • new_values (dict) – dictionary with new values where keys are the same as column names on UI: ‘RPM Name’, ‘Architecture’, ‘Version’.

  • architecture (str optional) – filter package rule by its architecture

  • version (str optional) – filter package rule by its version (string value with exact correspondence to UI)

search_package_rule(cv_name, filter_name, query)

Search for specific package rule in RPM content view filter.

Parameters
  • cv_name (str) – content view name

  • filter_name (str) – content view filter name

  • query (str) – search query

remove_package_rule(cv_name, filter_name, rpm_name, architecture=None, version=None)

Remove specific package rule from RPM content view filter.

Parameters
  • cv_name (str) – content view name

  • filter_name (str) – content view filter name

  • rpm_name (str) – existing package (RPM) name

  • architecture (str optional) – filter package rule by its architecture

  • version (str optional) – filter package rule by its version (string value with exact correspondence to UI)

add_errata(cv_name, filter_name, errata_id=None, search_filters=None)

Add errata to errata content view filter.

Parameters
  • cv_name (str) – content view name

  • filter_name (str) – content view filter name

  • errata_id (str optional) – errata ID. If not provided - all available will be added instead (taking into consideration applied search filters)

  • search_filters (dict) – search filters to apply before adding errata. Dictionary where keys are widget names and values are widget values accordingly

add_package_group(cv_name, filter_name, package_group)

Add package group to package group content view filter.

Parameters
  • cv_name (str) – content view name

  • filter_name (str) – content view filter name

  • package_group (str) – package group name

add_module_stream(cv_name, filter_name, module_stream_query)

Add module stream to module stream content view filter.

Parameters
  • cv_name (str) – content view name

  • filter_name (str) – content view filter name

  • module_stream_query (str) – module stream query with name and stream version

class airgun.entities.contentviewfilter.ShowAllContentViewFilters(obj, navigate_obj, logger=None)

Navigate to All Content View Filters screen by proceeding through Content View -> Yum Content -> Filters tab.

Parameters

cv_name – name of content view

VIEW
am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.contentviewfilter.AddNewContentViewFilter(obj, navigate_obj, logger=None)

Navigate to New Content View Filter screen.

Parameters

cv_name – name of content view

VIEW
am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.contentviewfilter.EditContentViewFilter(obj, navigate_obj, logger=None)

Navigate to Edit Content View Filter screen.

Parameters
  • cv_name – name of content view

  • filter_name – name of content view filter

VIEW
am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

resetter(*args, **kwargs)

Refresh the page as it won’t be possible to read dynamically added/updated package filter rows otherwise.

prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.dashboard
Module Contents
Classes

DashboardEntity

OpenDashboard

Navigate to Dashboard page

class airgun.entities.dashboard.DashboardEntity(browser)
search(value)

Initiate search procedure that applied on all dashboard widgets. Return widgets values as a result

read(widget_name)

Read specific widget value

read_all()

Read all dashboard widgets values

action(values)

Perform action against specific widget. In most cases, re-direction to another entity is happened

class airgun.entities.dashboard.OpenDashboard(obj, navigate_obj, logger=None)

Navigate to Dashboard page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

post_navigate(_tries=0, *args, **kwargs)

Disable auto-refresh feature for dashboard entity each time navigation to the page is finished

airgun.entities.discoveredhosts
Module Contents
Classes

DiscoveredHostsEntity

ShowAllDiscoveredHosts

Navigate to All Discovered hosts screen.

ShowDiscoveredHostDetailsView

Navigate to Discovered Host details screen.

DiscoveredHostsSelectAction

Navigate to Action page by selecting checkboxes for necessary discovered

DiscoveredHostProvisionActionNavigation

AirGun's version of navmazing.NavigateStep with custom

class airgun.entities.discoveredhosts.DiscoveredHostsEntity(browser)
endpoint_path = /discovered_hosts
wait_for_entity(entity_name)

Wait for a host to be discovered providing the expected entity_name

Note: When no discovered host exists is in the system, the search box

does not exist in the DOM, and as we are waiting for a host to be discovered we have to ensure that the view became searchable.

:raise TimedOutError if the view will not became searchable in time :raise TimedOutError if the host is not discovered in time :returns the entity table row columns values

search(value)

Search for ‘value’ and return discovery hosts values that match.

Parameters

value (str) – filter text.

delete(entity_name)

Delete discovered host with name entity_name

read(entity_name, widget_names=None)

Return a dict with properties of discovered host.

provision(entity_name, host_group, organization, location, quick=True, host_values=None)

Provision a discovered host with name entity_name.

Parameters
  • entity_name (str) – The discovered host name.

  • host_group (str) – The hostgroup to select for the host provisioning.

  • organization (str) – The Organization to select for the host provisioning.

  • location (str) – the Location to select for host provisioning.

  • quick (bool) – Whether to proceed to provisioning with default values. If not a custom host edit dialog will appear to edit the custom values.

  • host_values (dict) – The custom host provisioning values to fill the custom host view that appear in case of not quick procedure.

apply_action(action_name, entities_list, values=None)

Apply action name for discovered hosts.

Parameters
  • action_name (str) – The action name to apply, available: ‘Assign Location’, ‘Assign Organization’, ‘Auto Provision’, ‘Delete’, ‘Reboot’

  • entities_list (list str) – Discovered hosts name list.

  • values (dict) – The values to fill the action form dialog with.

class airgun.entities.discoveredhosts.ShowAllDiscoveredHosts(obj, navigate_obj, logger=None)

Navigate to All Discovered hosts screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.discoveredhosts.ShowDiscoveredHostDetailsView(obj, navigate_obj, logger=None)

Navigate to Discovered Host details screen.

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.discoveredhosts.DiscoveredHostsSelectAction(obj, navigate_obj, logger=None)

Navigate to Action page by selecting checkboxes for necessary discovered hosts and then clicking on the action name button in ‘Select Action’ dropdown.

Parameters
  • action_name – the action name to select from dropdown button

  • entities_list – list of discovered hosts that need to apply action on.

ACTIONS_VIEWS
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.discoveredhosts.DiscoveredHostProvisionActionNavigation(obj, navigate_obj, logger=None)

AirGun’s version of navmazing.NavigateStep with custom implementations of navmazing.NavigateStep.am_i_here and navmazing.NavigateStep.go and ability to work with views.

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.discoveryrule
Module Contents
Classes

DiscoveryRuleEntity

ShowAllDiscoveryRules

Navigate to All Discovery rules screen.

AddNewDiscoveryRule

Navigate to Create Discovery rule page.

EditDiscoveryRule

Navigate to Edit Discovery rule page.

DiscoveredRuleHosts

Navigate to discovery rule entity Associated/Discovered Hosts page by

class airgun.entities.discoveryrule.DiscoveryRuleEntity(browser)
endpoint_path = /discovery_rules
create(values)

Create new Discovery rule

Parameters

values – Parameters to be assigned to discovery rule, Name, Search, Host Group and Priority should be provided

delete(entity_name)

Delete corresponding Discovery rule

Parameters

entity_name (str) – name of the corresponding discovery rule

read(entity_name, widget_names=None)

Reads content of corresponding Discovery rule

Parameters

entity_name (str) – name of the corresponding discovery rule

Returns

dict representing tabs, with nested dicts representing fields and values

read_all()

Reads the whole discovery rules table.

Returns

list of table rows, each row is dict, attribute as key with correct value

update(entity_name, values)

Update existing Discovery rule

Parameters
  • entity_name (str) – name of the corresponding discovery rule

  • values – parameters to be changed at discovery rule

enable(entity_name)

Enable corresponding Discovery rule

Parameters

entity_name (str) – name of the corresponding discovery rule

disable(entity_name)

Disable corresponding Discovery rule

Parameters

entity_name (str) – name of the corresponding discovery rule

read_discovered_hosts(entity_name, widget_names=None)

Read Discovered hosts corresponding to Discovery rule search field.

Parameters

entity_name (str) – name of the discovery rule entity

Returns

The discovered hosts view properties

read_associated_hosts(entity_name, widget_names=None)

Read Discovery rule associated hosts.

Parameters

entity_name – name of the discovery rule entity

Returns

The hosts view properties

class airgun.entities.discoveryrule.ShowAllDiscoveryRules(obj, navigate_obj, logger=None)

Navigate to All Discovery rules screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.discoveryrule.AddNewDiscoveryRule(obj, navigate_obj, logger=None)

Navigate to Create Discovery rule page.

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.discoveryrule.EditDiscoveryRule(obj, navigate_obj, logger=None)

Navigate to Edit Discovery rule page.

Parameters

entity_name – name of the discovery rule

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.discoveryrule.DiscoveredRuleHosts(obj, navigate_obj, logger=None)

Navigate to discovery rule entity Associated/Discovered Hosts page by clicking on the action name of the entity dropdown button.

Args:

action_name: the action name to select from dropdown button. entity_name: name of the discovery rule entity.

ACTIONS_VIEWS
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.domain
Module Contents
Classes

DomainEntity

ShowAllDomains

Navigate to All Domains page

AddNewDomain

Navigate to Create Domain page

EditDomain

Navigate to Edit Domain page

class airgun.entities.domain.DomainEntity(browser)
endpoint_path = /domains
create(values)

Create a new domain.

search(value)

Search for ‘value’ and return domain names that match.

Parameters

value – text to filter (default: no filter)

read(entity_name, widget_names=None)

Return dict with properties of domain.

update(entity_name, values)

Update an existing domain.

add_parameter(entity_name, param_name, param_value)

Add new parameter to existing domain entity

Parameters
  • entity_name – Domain name to be edited

  • param_name – Name of a parameter to be added

  • param_value – Value of a parameter to be added

remove_parameter(entity_name, param_name)

Remove parameter from existing domain entity

Parameters
  • entity_name – Domain name to be edited

  • param_name – Name of a parameter to be removed

delete(entity_name)

Delete existing domain entity

class airgun.entities.domain.ShowAllDomains(obj, navigate_obj, logger=None)

Navigate to All Domains page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.domain.AddNewDomain(obj, navigate_obj, logger=None)

Navigate to Create Domain page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.domain.EditDomain(obj, navigate_obj, logger=None)

Navigate to Edit Domain page

Parameters

entity_name – name of the domain

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.errata
Module Contents
Classes

ErrataEntity

ShowAllErratum

Navigate to All Erratum screen.

ErrataDetails

Navigate to Errata details page.

class airgun.entities.errata.ErrataEntity(browser)
endpoint_path = /errata
search(value, applicable=True, installable=False, repo=None)

Search for specific errata.

Parameters
  • value (str) – search query to type into search field.

  • applicable (bool) – filter by only applicable errata

  • installable (bool) – filter by only installable errata

  • repo (str optional) – filter by repository name

Returns

list of dicts representing table rows

Return type

list

read(entity_name, applicable=False, installable=False, repo=None, environment=None, widget_names=None)

Read errata details.

Parameters
  • entity_name (str) – errata id or title

  • applicable (bool) – filter by only applicable errata

  • installable (bool) – filter by only installable errata

  • repo (str optional) – filter by repository name

  • environment (str optional) – filter applicable hosts by environment name

Returns

dict representing tabs, with nested dicts representing fields and values

Return type

dict

install(entity_name, host_name)

Install errata on content host.

Parameters
  • entity_name (str) – errata id or title

  • host_name (str) – content host name to apply errata on

search_content_hosts(entity_name, value, environment=None)

Search errata applicability for content hosts.

Parameters
  • entity_name (str) – errata id or title

  • value (str) – search query to type into search field.

  • environment (str optional) – filter applicable hosts by environment name

class airgun.entities.errata.ShowAllErratum(obj, navigate_obj, logger=None)

Navigate to All Erratum screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.errata.ErrataDetails(obj, navigate_obj, logger=None)

Navigate to Errata details page.

Parameters

entity_name – id or title of errata

Optional Args:

applicable: whether to filter errata by only applicable ones installable: whether to filter errata by only installable ones repo: name of repository to filter errata by

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.filter
Module Contents
Classes

FilterEntity

ShowAllFilters

Navigate to All Role Filters page by pressing 'Filters' button on Roles

AddNewFilter

Navigate to role's Create Filter page

EditFilter

Navigate to role's Edit Filter page

class airgun.entities.filter.FilterEntity(browser)
create(role_name, values)

Create new filter for specific role

search(role_name, value)

Search for filter assigned to the role

read(role_name, entity_name, widget_names=None)

Read values for specific filter

read_all(role_name)

Read all the available role filters table values

read_permissions(role_name)

Return all role filters permissions as a dict with resources as keys and permission names as values.

update(role_name, entity_name, values)

Update filter values

delete(role_name, entity_name)

Delete specific filter from role

class airgun.entities.filter.ShowAllFilters(obj, navigate_obj, logger=None)

Navigate to All Role Filters page by pressing ‘Filters’ button on Roles List view.

Parameters

role_name – name of role

VIEW
am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.filter.AddNewFilter(obj, navigate_obj, logger=None)

Navigate to role’s Create Filter page

Parameters
  • role_name – name of role

  • entity_name – name of filter

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.filter.EditFilter(obj, navigate_obj, logger=None)

Navigate to role’s Edit Filter page

Parameters
  • role_name – name of role

  • entity_name – name of filter

VIEW
am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.hardware_model
Module Contents
Classes

HardwareModelEntity

ShowAllHardwareModels

Navigate to All Hardware Model screen.

AddNewHardwareModel

Navigate to Create new Hardware Model screen.

EditHardwareModel

Navigate to Edit Hardware Model screen.

class airgun.entities.hardware_model.HardwareModelEntity(browser)
endpoint_path = /models
create(values)

Create new hardware model

search(value)

Search for specific hardware model

read(entity_name, widget_names=None)

Read values for existing hardware model

update(entity_name, values)

Update hardware model values

delete(entity_name, err_message='')

Delete hardware model

err_message - expected when dialog throws an error, error message is checked

class airgun.entities.hardware_model.ShowAllHardwareModels(obj, navigate_obj, logger=None)

Navigate to All Hardware Model screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.hardware_model.AddNewHardwareModel(obj, navigate_obj, logger=None)

Navigate to Create new Hardware Model screen.

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.hardware_model.EditHardwareModel(obj, navigate_obj, logger=None)

Navigate to Edit Hardware Model screen.

Parameters

entity_name – name of hardware model

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.host
Module Contents
Classes

HostEntity

ShowAllHosts

Navigate to All Hosts page

AddNewHost

Navigate to Create Host page

RegisterHost

Navigate to Register Host page

ShowHostDetails

Navigate to Host Details page by clicking on necessary host name in the

EditHost

Navigate to Edit Host page by clicking on 'Edit' button for specific

HostsSelectAction

Navigate to Action page by selecting checkboxes for necessary hosts and

ShowRecommendations

Navigate to Insights recommendations page

InsightsTab

Navigate to Insights tab on host details page

class airgun.entities.host.HostEntity(browser)
endpoint_path = /hosts
HELPER_CLASS
create(values)

Create new host entity

get_register_command(values, full_read=None)

Get curl command generated on Register Host page

search(value)

Search for existing host entity

host_status(value)

Get Host status

get_details(entity_name, widget_names=None)

Read host values from Host Details page, optionally only the widgets in widget_names will be read.

read(entity_name, widget_names=None)

Read host values from Host Edit page

read_all()

Read all values from hosts title page

update(entity_name, values)

Update an existing host with values

delete(entity_name, cancel=False)

Delete host from the system

delete_interface(entity_name, interface_id)

Delete host network interface.

Parameters
  • entity_name – The host name to delete the network interface from

  • interface_id – The network interface identifier.

read_yaml_output(entity_name)

Get puppet external nodes YAML dump for specific host

read_insights_recommendations(entity_name)

Get Insights recommendations for host

insights_tab(entity_name)

Get details from Insights tab

_select_action(action_name, entities_list)

Navigate to all entities, select the entities, and returns the view of the selected action name from main entity select action dropdown.

apply_action(action_name, entities_list, values=None)

Apply action name for host/hosts

export()

Export hosts list.

Return str

path to saved file

schedule_remote_job(entities_list, values, timeout=60, wait_for_results=True)

Apply Schedule Remote Job action to the hosts names in entities_list

Parameters
  • entities_list – The host names to apply the remote job.

  • values – the values to fill The Job invocation view.

  • timeout – The time to wait for the job to finish.

  • wait_for_results – Whether to wait for the job to finish execution.

Returns

The job invocation status view values

play_ansible_roles(entities_list, timeout=60, wait_for_results=True)
Play Ansible Roles on hosts names in entities_list

If keyword ‘All’ is supplied instead of list, all hosts are selected using the checkbox from table header

Parameters
  • entities_list – The host names to play the ansible roles on.

  • timeout – The time to wait for the job to finish.

  • wait_for_results – Whether to wait for the job to finish execution.

Returns

The job invocation status view values

delete_hosts(entities_list, timeout=60, wait_for_results=True)

Delete all hosts from entities list If keyword ‘All’ is supplied instead of list, all hosts are selected using the checkbox from table header

get_puppet_class_parameter_value(entity_name, name)

Read host Puppet class parameter value.

Parameters
  • entity_name – The host name for which to read the parameter.

  • name – the parameter name.

set_puppet_class_parameter_value(entity_name, name, value)

Set Puppet class parameter value

Parameters
  • entity_name (str) – The host name for which to set the parameter value.

  • name (str) – the parameter name.

  • value (dict) – The parameter value

get_webconsole_content(entity_name, rhel_version=7)

Navigate to host’s webconsole and return the hostname from the cockpit page

Parameters
  • entity_name (str) – The host name for which to set the parameter value.

  • rhel_version (int) – Choose UI elements based on rhel version.

class airgun.entities.host.ShowAllHosts(obj, navigate_obj, logger=None)

Navigate to All Hosts page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.host.AddNewHost(obj, navigate_obj, logger=None)

Navigate to Create Host page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.host.RegisterHost(obj, navigate_obj, logger=None)

Navigate to Register Host page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.host.ShowHostDetails(obj, navigate_obj, logger=None)

Navigate to Host Details page by clicking on necessary host name in the table

Parameters

entity_name – name of the host

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.host.EditHost(obj, navigate_obj, logger=None)

Navigate to Edit Host page by clicking on ‘Edit’ button for specific host in the table

Parameters

entity_name – name of the host

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.host.HostsSelectAction(obj, navigate_obj, logger=None)
Navigate to Action page by selecting checkboxes for necessary hosts and

then clicking on the action name button in ‘Select Action’ dropdown.

Parameters
  • action_name – the action name to select from dropdown button

  • entities_list – list of hosts that need to be modified

ACTIONS_VIEWS
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.host.ShowRecommendations(obj, navigate_obj, logger=None)

Navigate to Insights recommendations page

VIEW
class airgun.entities.host.InsightsTab(obj, navigate_obj, logger=None)

Navigate to Insights tab on host details page

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.host_new
Module Contents
Classes

NewHostEntity

ShowNewHostDetails

Navigate to Host Details page by clicking on necessary host name in the table

class airgun.entities.host_new.NewHostEntity(browser)
create(values)

Create new host entity

get_details(entity_name, widget_names=None)

Read host values from Host Details page, optionally only the widgets in widget_names will be read.

schedule_job(entity_name, values)

Schedule a remote execution on selected host

get_packages(entity_name, search='')

Filter installed packages on host

install_package(entity_name, package)

Installs package on host using the installation modal

apply_package_action(entity_name, package_name, action)

Apply action to selected package based on the package_name

get_errata_by_type(entity_name, type)

List errata based on type and return table

apply_erratas(entity_name, search)

Apply errata on selected host based on errata_id

get_module_streams(entity_name, search)

Filter module streams

apply_module_streams_action(entity_name, module_stream, action)

Apply action to selected Module stream based on the module_stream

class airgun.entities.host_new.ShowNewHostDetails(obj, navigate_obj, logger=None)

Navigate to Host Details page by clicking on necessary host name in the table

Parameters

entity_name – name of the host

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.hostcollection
Module Contents
Classes

HostCollectionEntity

ShowAllHostCollections

AirGun's version of navmazing.NavigateStep with custom

AddNewHostCollections

AirGun's version of navmazing.NavigateStep with custom

EditHostCollections

AirGun's version of navmazing.NavigateStep with custom

class airgun.entities.hostcollection.HostCollectionEntity(browser)
endpoint_path = /host_collections
create(values)

Create a host collection

delete(entity_name)

Delete the host collection entity.

search(value)

Search for ‘value’ and return host collections that match.

read(entity_name, widget_names=None)

Return a dict with properties of host collection.

update(entity_name, values)

Update host collection properties with values.

associate_host(entity_name, host_name)

Associate a host with host collection

Parameters
  • entity_name (str) – The host collection name.

  • host_name (str) – The host name to be associated with to host collection name.

manage_packages(entity_name, content_type='Package', packages=None, action='install', action_via='via Katello Agent', job_values=None)

Manage host collection packages.

Parameters
  • entity_name (str) – The host collection name.

  • content_type (str) – The content type to apply action on. Available options: Package, Package Group.

  • packages (str) – a list of packages separated by a space to apply the action on.

  • action (str) – The action to apply. Available options: install, update, update_all, delete.

  • action_via (str) – Via which mean to apply action. Available options: “via Katello Agent”, “via remote execution”, “via remote execution - customize first”

  • job_values (dict) – Remote Execution Job custom form values. When action_via is: “via remote execution - customize first”, the new remote execution job form is opened and we can set custom values.

search_applicable_hosts(entity_name, errata_id)

Check for search URI in Host Collection errata view.

Parameters
  • entity_name (str) – The host collection name.

  • errata_id (str) – the applicable errata id.

Returns

Search URL to list the applicable hosts

install_errata(entity_name, errata_id, install_via='via Katello agent', job_values=None)

Install host collection errata

Parameters
  • entity_name (str) – The host collection name.

  • errata_id (str) – the errata id to install.

  • install_via (str) – Via which mean to install errata. Available options: “via Katello Agent”, “via remote execution”, “via remote execution - customize first”

  • job_values (dict) – Remote Execution Job custom form values. When install_via is: “via remote execution - customize first”, the new remote execution job form is opened and we can set custom values.

Returns

Task details view values when install “via kattelo agent” else returns job status view values.

manage_module_streams(entity_name, action_type, module_name, stream_version, customize=False, customize_values=None)

Manage module streams :param str entity_name: The host collection name. :param action_type: remote action to execute on content host. Action value can be one of them e.g. ‘Enable’, ‘Disable’, ‘Install’, ‘Update’, ‘Remove’, ‘Reset’

Parameters
  • module_name (str) – Module Stream name to remotely install/upgrade/remove (depending on action_type)

  • stream_version (str) – String with Stream Version of Module

  • customize – Boolean indicating if additional custom action should be called

  • customize_values – Dict with custom actions to run. Mandatory if customize is True

Returns

Returns a dict containing job status details

change_assigned_content(entity_name, lce, content_view)

Change host collection lifecycle environment and content view

Parameters
  • entity_name (str) – The host collection name.

  • lce (str) – Lifecycle environment name.

  • content_view (str) – Content view name.

Returns

task details view values

class airgun.entities.hostcollection.ShowAllHostCollections(obj, navigate_obj, logger=None)

AirGun’s version of navmazing.NavigateStep with custom implementations of navmazing.NavigateStep.am_i_here and navmazing.NavigateStep.go and ability to work with views.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.hostcollection.AddNewHostCollections(obj, navigate_obj, logger=None)

AirGun’s version of navmazing.NavigateStep with custom implementations of navmazing.NavigateStep.am_i_here and navmazing.NavigateStep.go and ability to work with views.

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.hostcollection.EditHostCollections(obj, navigate_obj, logger=None)

AirGun’s version of navmazing.NavigateStep with custom implementations of navmazing.NavigateStep.am_i_here and navmazing.NavigateStep.go and ability to work with views.

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.hostgroup
Module Contents
Classes

HostGroupEntity

ShowAllHostGroups

Navigate to All Host Groups page

AddNewHostGroup

Navigate to Create Host Group page

EditHostGroup

Navigate to Edit Host Group page by clicking entity name in the table

class airgun.entities.hostgroup.HostGroupEntity(browser)
endpoint_path = /hostgroups
create(values)

Create new host group entity

search(value)

Search for existing host group entity

read(entity_name, widget_names=None)

Read values from host group edit page

read_all()

Read values from host groups title page

delete(entity_name)

Delete host group from the system

update(entity_name, values)

Edit an existing host group

class airgun.entities.hostgroup.ShowAllHostGroups(obj, navigate_obj, logger=None)

Navigate to All Host Groups page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.hostgroup.AddNewHostGroup(obj, navigate_obj, logger=None)

Navigate to Create Host Group page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.hostgroup.EditHostGroup(obj, navigate_obj, logger=None)

Navigate to Edit Host Group page by clicking entity name in the table

Parameters

entity_name – name of the host group

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.http_proxy
Module Contents
Classes

HTTPProxyEntity

ShowAllHTTPProxy

Navigate to All http-proxy page

AddNewHTTPProxy

Navigate to Create HTTP Proxy page

EditHTTPProxy

Navigate to Edit HTTP Proxy page

class airgun.entities.http_proxy.HTTPProxyEntity(browser)
endpoint_path = /http_proxies
create(values)

Create a new http-proxy.

search(value)

Search for ‘value’ and return http-proxy names that match.

Parameters

value – text to filter (default: no filter)

read(entity_name, widget_names=None)

Return dict with properties of http-proxy.

update(entity_name, values)

Update an existing http-proxy.

delete(entity_name)

Delete existing http-proxy entity

class airgun.entities.http_proxy.ShowAllHTTPProxy(obj, navigate_obj, logger=None)

Navigate to All http-proxy page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.http_proxy.AddNewHTTPProxy(obj, navigate_obj, logger=None)

Navigate to Create HTTP Proxy page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.http_proxy.EditHTTPProxy(obj, navigate_obj, logger=None)

Navigate to Edit HTTP Proxy page

Parameters

entity_name – name of the HTTP Proxy

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.job_invocation
Module Contents
Classes

JobInvocationEntity

ShowAllJobs

Navigate to All Job Invocations screen.

RunNewJob

Navigate to Create new Job Invocation screen.

JobStatus

Navigate to Job Invocation status screen.

class airgun.entities.job_invocation.JobInvocationEntity(browser)
endpoint_path = /job_invocations
run(values)

Run specific job

search(value)

Search for specific job invocation

read(entity_name, host_name, widget_names=None)

Read values for scheduled or already executed job

wait_job_invocation_state(entity_name, host_name, expected_state='succeeded')

Check job invocation state from table view

class airgun.entities.job_invocation.ShowAllJobs(obj, navigate_obj, logger=None)

Navigate to All Job Invocations screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.job_invocation.RunNewJob(obj, navigate_obj, logger=None)

Navigate to Create new Job Invocation screen.

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.job_invocation.JobStatus(obj, navigate_obj, logger=None)

Navigate to Job Invocation status screen.

Parameters
  • entity_name – name of the job

  • host_name – name of the host to which job was applied

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.job_template
Module Contents
Classes

JobTemplateEntity

ShowAllTemplates

Navigate to All Job Templates screen.

AddNewTemplate

Navigate to Create new Job Template screen.

EditTemplate

Navigate to Edit Job Template screen.

ReadTemplate

Navigate to Read Job Template screen.

CloneTemplate

Navigate to Clone Job Template screen.

class airgun.entities.job_template.JobTemplateEntity(browser)
endpoint_path = /job_templates
create(values)

Create new job template

search(value)

Search for specific job template

read(entity_name, editor_view_option=None, widget_names=None)

Read Job template values from job template Edit view.

Parameters
  • entity_name – Job template name

  • editor_view_option – The edit view option to set.

  • widget_names – Read only the widgets in widget_names (Optional)

update(entity_name, values)

Update necessary values for existing job template

clone(entity_name, values)

Clone existing job template

delete(entity_name)

Delete job template

class airgun.entities.job_template.ShowAllTemplates(obj, navigate_obj, logger=None)

Navigate to All Job Templates screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.job_template.AddNewTemplate(obj, navigate_obj, logger=None)

Navigate to Create new Job Template screen.

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.job_template.EditTemplate(obj, navigate_obj, logger=None)

Navigate to Edit Job Template screen.

Parameters

entity_name – name of job template

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.job_template.ReadTemplate(obj, navigate_obj, logger=None)

Navigate to Read Job Template screen.

Parameters
  • entity_name – name of job template

  • editor_view_option – The edit view option to set.

post_navigate(_tries, *args, **kwargs)

Describes steps that takes place before any prerequisite after navigation takes place.

This is a default and is generally overridden.

class airgun.entities.job_template.CloneTemplate(obj, navigate_obj, logger=None)

Navigate to Clone Job Template screen.

Parameters

entity_name – name of job template to be cloned

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.ldap_authentication
Module Contents
Classes

LDAPAuthenticationEntity

ShowAllLDAPSources

Navigate to All LDAP Authentication sources screen.

AddNewLDAPSource

Navigate to Create LDAP Authentication screen.

EditLDAPSource

Navigate to Edit LDAP Authentication screen.

class airgun.entities.ldap_authentication.LDAPAuthenticationEntity(browser)
endpoint_path = /auth_sources
create(values)

Create new LDAP Authentication source

read(entity_name, widget_names=None)

Read all values for existing LDAP Authentication source

read_table_row(entity_name)

Read values for corresponding table row from LDAP Authentication title page. Return None in case row is not present in the table

update(entity_name, values)

Update existing LDAP Authentication source

delete(entity_name)

Delete corresponding LDAP Authentication source

test_connection(values)

Testing FQDN for test connection

read_auth_source_counts(auth_source_type)

Read values for corresponding auth source card count

class airgun.entities.ldap_authentication.ShowAllLDAPSources(obj, navigate_obj, logger=None)

Navigate to All LDAP Authentication sources screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.ldap_authentication.AddNewLDAPSource(obj, navigate_obj, logger=None)

Navigate to Create LDAP Authentication screen.

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.ldap_authentication.EditLDAPSource(obj, navigate_obj, logger=None)

Navigate to Edit LDAP Authentication screen.

Parameters

entity_name – name of LDAP Authenication source

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.lifecycleenvironment
Module Contents
Classes

LCEEntity

ShowAllLCE

Navigate to All Lifecycle Environments page

AddNewLCEPath

Navigate to New Lifecycle Environment Path page

AddNewLCE

Navigate to New Lifecycle Environment page

EditLCE

Navigate to Edit Lifecycle Environment page

class airgun.entities.lifecycleenvironment.LCEEntity(browser)
endpoint_path = /lifecycle_environments
create_environment_path(values)
create_environment(values, entity_name)
create(values, prior_entity_name=None)

Create new lifecycle environment :param values: Parameters to be assigned to lce, at least name should be provided :param prior_entity_name: Specify entity name which should be a parent to lifecycle environment that created in a chain

read(entity_name, widget_names=None)

Read specific lifecycle environment details from its Edit page

read_all()

Read all available lifecycle environments details from generic lifecycle environments page

update(entity_name='Library', values=None)

Update existing lifecycle environment values

delete(entity_name)

Deletes existing lifecycle environment entity

search_package(entity_name, package_name, cv_name=None, repo_name=None)

Search for specific package inside lifecycle environment

search_module_stream(entity_name, module_name, cv_name=None, repo_name=None)

Search for specific module stream inside lifecycle environment

class airgun.entities.lifecycleenvironment.ShowAllLCE(obj, navigate_obj, logger=None)

Navigate to All Lifecycle Environments page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.lifecycleenvironment.AddNewLCEPath(obj, navigate_obj, logger=None)

Navigate to New Lifecycle Environment Path page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.lifecycleenvironment.AddNewLCE(obj, navigate_obj, logger=None)

Navigate to New Lifecycle Environment page

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.lifecycleenvironment.EditLCE(obj, navigate_obj, logger=None)

Navigate to Edit Lifecycle Environment page

Parameters

entity_name – name of the lifecycle environment

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.location
Module Contents
Classes

LocationEntity

ShowAllLocations

Navigate to All Locations page

AddNewLocation

Navigate to Create Location page

EditLocation

Navigate to Edit Location page

SelectLocationContext

Select Location from menu

class airgun.entities.location.LocationEntity(browser)
endpoint_path = /locations
create(values)

Create new location entity

delete(entity_name)

Delete existing location

read(entity_name, widget_names=None)

Read specific location details

search(value)

Search for location entity

update(entity_name, values)

Update necessary values for location

select(loc_name)

Select necessary location from context menu on the top of the page

class airgun.entities.location.ShowAllLocations(obj, navigate_obj, logger=None)

Navigate to All Locations page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.location.AddNewLocation(obj, navigate_obj, logger=None)

Navigate to Create Location page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.location.EditLocation(obj, navigate_obj, logger=None)

Navigate to Edit Location page

Parameters

entity_name – name of the location

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.location.SelectLocationContext(obj, navigate_obj, logger=None)

Select Location from menu

Parameters

loc_name – name of the location

VIEW
am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.login
Module Contents
Classes

LoginEntity

NavigateToLogin

AirGun's version of navmazing.NavigateStep with custom

class airgun.entities.login.LoginEntity(browser)
read_sat_version()
login(values)
logout()
class airgun.entities.login.NavigateToLogin(obj, navigate_obj, logger=None)

AirGun’s version of navmazing.NavigateStep with custom implementations of navmazing.NavigateStep.am_i_here and navmazing.NavigateStep.go and ability to work with views.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

airgun.entities.media
Module Contents
Classes

MediaEntity

ShowAllMedium

Navigate to All Medium screen.

AddNewMedia

Navigate to Create new Media screen.

EditMedia

Navigate to Edit Media screen.

class airgun.entities.media.MediaEntity(browser)
endpoint_path = /media
create(values)

Create new media

search(value)

Search for specific media

read(entity_name, widget_names=None)

Read values for existing media

update(entity_name, values)

Update media values

delete(entity_name)

Delete media

class airgun.entities.media.ShowAllMedium(obj, navigate_obj, logger=None)

Navigate to All Medium screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.media.AddNewMedia(obj, navigate_obj, logger=None)

Navigate to Create new Media screen.

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.media.EditMedia(obj, navigate_obj, logger=None)

Navigate to Edit Media screen.

Parameters

entity_name – name of media

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.modulestream
Module Contents
Classes

ModuleStreamEntity

ShowAllModuleStreams

navigate to Module Streams Page

ShowModuleStreamsDetails

Navigate to Module Stream Details page by clicking on

class airgun.entities.modulestream.ModuleStreamEntity(browser)
endpoint_path = /module_streams
search(query)

Search for module stream

Parameters

query (str) – search query to type into search field. E.g. name = "ant".

read(entity_name, stream_version, widget_names=None)

Read module streams values from Module Stream Details page

Parameters
  • entity_name (str) – the module stream name to read.

  • stream_version (str) – stream version of module.

class airgun.entities.modulestream.ShowAllModuleStreams(obj, navigate_obj, logger=None)

navigate to Module Streams Page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.modulestream.ShowModuleStreamsDetails(obj, navigate_obj, logger=None)

Navigate to Module Stream Details page by clicking on necessary module name in the table

Parameters
  • entity_name – The module name.

  • module_version – The version of module stream.

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

post_navigate(_tries, *args, **kwargs)

Describes steps that takes place before any prerequisite after navigation takes place.

This is a default and is generally overridden.

am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

airgun.entities.organization
Module Contents
Classes

OrganizationEntity

ShowAllOrganizations

Navigate to All Organizations page

AddNewOrganization

Navigate to Create Organization page

EditOrganization

Navigate to Edit Organization page

SelectOrganizationContext

Select Organization from menu

class airgun.entities.organization.OrganizationEntity(browser)
endpoint_path = /organizations
create(values)

Create new organization entity

delete(entity_name)

Delete existing organization

read(entity_name, widget_names=None)

Read specific organization details

search(value)

Search for organization entity

update(entity_name, values)

Update necessary values for organization

select(org_name)

Select necessary organization from context menu on the top of the page

class airgun.entities.organization.ShowAllOrganizations(obj, navigate_obj, logger=None)

Navigate to All Organizations page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.organization.AddNewOrganization(obj, navigate_obj, logger=None)

Navigate to Create Organization page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.organization.EditOrganization(obj, navigate_obj, logger=None)

Navigate to Edit Organization page

Parameters

entity_name – name of the organization

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.organization.SelectOrganizationContext(obj, navigate_obj, logger=None)

Select Organization from menu

Parameters

org_name – name of the organization

VIEW
am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

post_navigate(_tries, *args, **kwargs)

Handle alert screen if it’s present

airgun.entities.os
Module Contents
Classes

OperatingSystemEntity

ShowAllOperatingSystems

Navigate to All Operating Systems page

AddNewOperatingSystem

Navigate to Create Operating System page

EditOperatingSystem

Navigate to Edit Operating System page

class airgun.entities.os.OperatingSystemEntity(browser)
endpoint_path = /operatingsystems
create(values)

Create new operating system entity

delete(entity_name, cancel=False)

Remove existing operating system entity

search(value)

Search for operating system entity

read(entity_name, widget_names=None)

Read all values for created operating system entity

update(entity_name, values)

Update necessary values for operating system

class airgun.entities.os.ShowAllOperatingSystems(obj, navigate_obj, logger=None)

Navigate to All Operating Systems page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.os.AddNewOperatingSystem(obj, navigate_obj, logger=None)

Navigate to Create Operating System page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.os.EditOperatingSystem(obj, navigate_obj, logger=None)

Navigate to Edit Operating System page

Parameters

entity_name – name of the operating system

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.oscapcontent
Module Contents
Classes

OSCAPContentEntity

ShowAllSCAPContents

Navigate to All SCAP Contents screen.

UploadNewSCAPContent

Navigate to upload new SCAP Content page.

EditSCAPContent

Navigate to edit existing SCAP Content page.

class airgun.entities.oscapcontent.OSCAPContentEntity(browser)
endpoint_path = /compliance/scap_contents
create(values)

Create new SCAP Conent

Parameters

values – Parameters to be assigned to new SCAP content, manadatory values are Title and Scap file.

delete(entity_name)

Delete corresponding SCAP Content

Parameters

entity_name – title of the corresponding SCAP Content

search(title)

Search for SCAP Content

Parameters

title – title of the corresponding SCAP Content

Returns

result of the SCAP Content search

read(entity_name, widget_names=None)

Reads the content of corresponding SCAP Content

Parameters

entity_name – specify corresponding SCAP Content

Returns

dict representing tabs, with nested dicts representing fields

update(entity_name, values)

Updates instance of SCAP Content with new values

Parameters
  • entity_name – specify corresponding SCAP Content

  • values – updates individual parameters of SCAP Content instance

class airgun.entities.oscapcontent.ShowAllSCAPContents(obj, navigate_obj, logger=None)

Navigate to All SCAP Contents screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.oscapcontent.UploadNewSCAPContent(obj, navigate_obj, logger=None)

Navigate to upload new SCAP Content page.

VIEW
prerequisite
am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.oscapcontent.EditSCAPContent(obj, navigate_obj, logger=None)

Navigate to edit existing SCAP Content page.

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.oscappolicy
Module Contents
Classes

OSCAPPolicyEntity

ShowAllSCAPPolicies

Navigate to All SCAP Policies screen.

NewSCAPPolicy

Navigate to upload new SCAP Policies page.

EditSCAPPolicy

Navigate to edit existing SCAP Policy page.

DetailsSCAPPolicy

To get data from SCAPPolicyDetail view

class airgun.entities.oscappolicy.OSCAPPolicyEntity(browser)
endpoint_path = /compliance/policies
create(values)

Creates new OSCAP Policy

Parameters

values – Parameters to be assigned to new SCAP policy, mandatory values are Name, Scap Content and Period, with chosen date when policy is going to repeat

delete(entity_name)

Delete corresponding SCAP Policy

Parameters

entity_name – name of the corresponding SCAP Policy

search(entity_name)

Search for SCAP Policy

Parameters

entity_name – name of the corresponding SCAP Policy

Returns

result of the SCAP Policy search

details(entity_name, widget_names=None)
Read the content from corresponding SCAP Policy dashboard,

clicking on the Name of SCAP Policy shows the dashboard

Parameters

entity_name

Returns

dictionary with values from SCAP Policy Details View

read(entity_name, widget_names=None)

Reads the values of corresponding SCAP Policy - edit menu

Parameters

entity_name – specifies corresponding SCAP Policy

Returns

dict representing tabs, with nested dicts representing fields

update(entity_name, values)

Updates instance of SCAP Policy with new values

Parameters
  • entity_name – specifies corresponding SCAP Policy

  • values – updates individual parameters of corresponding SCAP Policy

class airgun.entities.oscappolicy.ShowAllSCAPPolicies(obj, navigate_obj, logger=None)

Navigate to All SCAP Policies screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.oscappolicy.NewSCAPPolicy(obj, navigate_obj, logger=None)

Navigate to upload new SCAP Policies page.

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.oscappolicy.EditSCAPPolicy(obj, navigate_obj, logger=None)

Navigate to edit existing SCAP Policy page.

Args: entity_name: name of SCAP policy

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.oscappolicy.DetailsSCAPPolicy(obj, navigate_obj, logger=None)

To get data from SCAPPolicyDetail view

Args: entity_name: name of SCAP policy

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.oscaptailoringfile
Module Contents
Classes

OSCAPTailoringFileEntity

ShowAllSCAPTailoringFiles

Navigate to All SCAP Tailoring File screen.

UploadNewSCAPTailoringFile

Navigate to upload new SCAP Tailoring File page.

EditSCAPTailoringFile

Navigate to edit existing SCAP Tailoring File page.

class airgun.entities.oscaptailoringfile.OSCAPTailoringFileEntity(browser)
endpoint_path = /compliance/tailoring_files
create(values)

Creates new SCAP Tailoring File

Parameters

values – Parameters to be assigned to new SCAP Tailoring File, mandatory values are Name and Scap file.

delete(entity_name)

Delete corresponding SCAP Tailoring File

Parameters

entity_name – name of the corresponding SCAP Tailoring File

search(entity_name)

Search for SCAP Tailoring File

Parameters

entity_name – name of the corresponding SCAP Tailoring File

Returns

result of the SCAP Tailoring File search

read(entity_name, widget_names=None)

Reads the content of corresponding SCAP Tailoring File

Parameters

entity_name – specify corresponding SCAP Tailoring File

Returns

dict representing tabs, with nested dicts representing fields

update(entity_name, values)

Updates instance of SCAP Tailoring File with new values

Parameters
  • entity_name – specify corresponding SCAP Tailoring File

  • values – updates individual parameters of corresponding SCAP Tailoring File

class airgun.entities.oscaptailoringfile.ShowAllSCAPTailoringFiles(obj, navigate_obj, logger=None)

Navigate to All SCAP Tailoring File screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.oscaptailoringfile.UploadNewSCAPTailoringFile(obj, navigate_obj, logger=None)

Navigate to upload new SCAP Tailoring File page.

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.oscaptailoringfile.EditSCAPTailoringFile(obj, navigate_obj, logger=None)

Navigate to edit existing SCAP Tailoring File page.

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.package
Module Contents
Classes

PackageEntity

ShowAllPackages

navigate to Packages Page

ShowPackageDetails

Navigate to Package Details page by clicking on necessary package name

class airgun.entities.package.PackageEntity(browser)
endpoint_path = /packages
search(query, repository='All Repositories', applicable=False, upgradable=False)

Search for package in the indicated repository

Parameters
  • query (str) – search query to type into search field. E.g. name = "bar".

  • repository (str) – repository name to select when searching for the package.

  • applicable (bool) – To show only applicable packages.

  • upgradable (bool) – To show only upgradable packages.

read(entity_name, repository='All Repositories', widget_names=None)

Read package values from Package Details page

Parameters
  • entity_name (str) – the package name to read.

  • repository (str) – repository name to select when searching for the package.

class airgun.entities.package.ShowAllPackages(obj, navigate_obj, logger=None)

navigate to Packages Page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.package.ShowPackageDetails(obj, navigate_obj, logger=None)

Navigate to Package Details page by clicking on necessary package name in the table

Parameters
  • entity_name – The package name.

  • repository – The package repository name.

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

airgun.entities.partitiontable
Module Contents
Classes

PartitionTableEntity

ShowAllPartitionTables

Navigate to All Partition Tables page

AddNewPartitionTable

Navigate to Create Partition Table page

EditPartitionTable

Navigate to Edit Partition Table page

ClonePartitionTable

Navigate to Create Partition Table page for cloned entity

class airgun.entities.partitiontable.PartitionTableEntity(browser)
endpoint_path = /templates/ptables
create(values)

Create new partition table entity

read(entity_name, widget_names=None)

Read all values for created partition table entity

search(value)

Search for partition table entity

update(entity_name, values)

Update partition table entity

clone(entity_name, values)

Clone existing partition table entity

lock(entity_name)

Lock partition table entity

unlock(entity_name)

Unlock partition table entity

delete(entity_name)

Delete existing partition table

class airgun.entities.partitiontable.ShowAllPartitionTables(obj, navigate_obj, logger=None)

Navigate to All Partition Tables page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.partitiontable.AddNewPartitionTable(obj, navigate_obj, logger=None)

Navigate to Create Partition Table page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.partitiontable.EditPartitionTable(obj, navigate_obj, logger=None)

Navigate to Edit Partition Table page

Parameters

entity_name – name of the partition table

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.partitiontable.ClonePartitionTable(obj, navigate_obj, logger=None)

Navigate to Create Partition Table page for cloned entity

Parameters

entity_name – name of the partition table to be cloned

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.product
Module Contents
Classes

ProductEntity

ShowAllProducts

Navigate to the page that contains all Products

AddNewProduct

Navigate to Create New Product page

EditProduct

Navigate to Edit Product page.

ProductRepoDiscovery

Navigate to Repo Discovery page for Product entity.

ProductsSelectAction

Navigate to Action page by selecting checkboxes for necessary Products and

class airgun.entities.product.ProductEntity(browser)
endpoint_path = /products
create(values, sync_plan_values=None)

Creates new product from UI.

Parameters

sync_plan_values – dict with values for creating sync_plan from product create page

delete(entity_name)

Deletes product from UI

search(value)

Search for specific product

read(entity_name, widget_names=None)

Read all values for already created product

update(entity_name, values)

Updates product from UI

discover_repo(values)

Repo discovery procedure

synchronize(entity_name)

Synchronize product

manage_http_proxy(entities_list, values)

Manage HTTP Proxy for product/products

Parameters
  • entities_list – The product names to perform Manage HTTP Proxy action.

  • values – dict containing http_proxy_policy and http_proxy values. eg: {‘http_proxy_policy’: ‘No HTTP Proxy’}, {‘http_proxy_policy’: ‘Global Default’}, {‘http_proxy_policy’: ‘Use specific HTTP Proxy’, ‘http_proxy’: ‘proxy_name’}

advanced_sync(entities_list, sync_type)

Advanced Sync for product/products

Parameters
  • entities_list – The product names to perform Advanced Sync action.

  • sync_type – value containing sync type. eg: sync_type=”optimized”, sync_type=”complete”

verify_content_checksum(entities_list)

Verify Content Checksum for product/products

Parameters

entities_list – The product names to perform Verify Content Checksum action.

class airgun.entities.product.ShowAllProducts(obj, navigate_obj, logger=None)

Navigate to the page that contains all Products

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.product.AddNewProduct(obj, navigate_obj, logger=None)

Navigate to Create New Product page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.product.EditProduct(obj, navigate_obj, logger=None)

Navigate to Edit Product page.

Parameters

entity_name – name of the product to be updated

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.product.ProductRepoDiscovery(obj, navigate_obj, logger=None)

Navigate to Repo Discovery page for Product entity.

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.product.ProductsSelectAction(obj, navigate_obj, logger=None)
Navigate to Action page by selecting checkboxes for necessary Products and

then clicking on the action name button in ‘Select Action’ dropdown.

Parameters
  • action_name – the action name to select from dropdown button

  • entities_list – list of Products that need to be modified

ACTIONS_VIEWS
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.provisioning_template
Module Contents
Classes

ProvisioningTemplateEntity

ShowAllProvisioningTemplates

Navigate to all Provisioning Templates screen.

AddNewProvisioningTemplate

Navigate to Create new Provisioning Template screen.

EditProvisioningTemplate

Navigate to Edit Provisioning Template screen.

CloneProvisioningTemplate

Navigate to Create Provisioning Template screen for cloned entity

class airgun.entities.provisioning_template.ProvisioningTemplateEntity(browser)
endpoint_path = /templates/provisioning_templates
create(values)

Create new provisioning template

search(value)

Search for existing provisioning template

read(entity_name, widget_names=None)

Read provisioning template values

clone(entity_name, values)

Clone existing provisioning template

lock(entity_name)

Lock provisioning template for editing

unlock(entity_name)

Unlock provisioning template for editing

is_locked(entity_name)

Check if provisioning template is locked for editing

update(entity_name, values)

Update provisioning template

delete(entity_name)

Delete provisioning template

class airgun.entities.provisioning_template.ShowAllProvisioningTemplates(obj, navigate_obj, logger=None)

Navigate to all Provisioning Templates screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.provisioning_template.AddNewProvisioningTemplate(obj, navigate_obj, logger=None)

Navigate to Create new Provisioning Template screen.

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.provisioning_template.EditProvisioningTemplate(obj, navigate_obj, logger=None)

Navigate to Edit Provisioning Template screen.

Parameters

entity_name – name of provisioning template to edit

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.provisioning_template.CloneProvisioningTemplate(obj, navigate_obj, logger=None)

Navigate to Create Provisioning Template screen for cloned entity

Parameters

entity_name – name of provisioning template to clone

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.puppet_class
Module Contents
Classes

PuppetClassEntity

ShowAllPuppetClasses

Navigate to All Puppet Classes screen.

EditPuppetClass

Navigate to Edit Puppet Class screen.

class airgun.entities.puppet_class.PuppetClassEntity(browser)
endpoint_path = /foreman_puppet/puppetclasses
search(value)

Search for puppet class entity

read(entity_name, widget_names=None)

Read puppet class entity values

read_smart_class_parameter(entity_name, parameter_name)

Read smart class parameter values for specific puppet class

update(entity_name, values)

Update puppet class values

delete(entity_name)

Delete puppet class entity

class airgun.entities.puppet_class.ShowAllPuppetClasses(obj, navigate_obj, logger=None)

Navigate to All Puppet Classes screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.puppet_class.EditPuppetClass(obj, navigate_obj, logger=None)

Navigate to Edit Puppet Class screen.

Parameters

entity_name – name of puppet class

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.puppet_environment
Module Contents
Classes

PuppetEnvironmentEntity

ShowAllPuppetEnvironmentsView

Navigate to All Puppet Environment screen.

AddNewPuppetEnvironmentView

Navigate to Create Puppet Environment screen.

EditPuppetEnvironmentView

Navigate to Edit Puppet Environment screen.

ImportPuppetEnvironmentView

Navigate to Import Puppet Environment screen.

class airgun.entities.puppet_environment.PuppetEnvironmentEntity(browser)
endpoint_path = /foreman_puppet/environments
create(values)

Create puppet environment entity

read(entity_name, widget_names=None)

Read puppet environment entity values

update(entity_name, values)

Update puppet environment values

delete(value)

Delete puppet environment entity

search(value)

Search for puppet environment entity

import_environments(value)

Import puppet environments

class airgun.entities.puppet_environment.ShowAllPuppetEnvironmentsView(obj, navigate_obj, logger=None)

Navigate to All Puppet Environment screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.puppet_environment.AddNewPuppetEnvironmentView(obj, navigate_obj, logger=None)

Navigate to Create Puppet Environment screen.

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.puppet_environment.EditPuppetEnvironmentView(obj, navigate_obj, logger=None)

Navigate to Edit Puppet Environment screen.

Parameters

entity_name – name of puppet environment

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.puppet_environment.ImportPuppetEnvironmentView(obj, navigate_obj, logger=None)

Navigate to Import Puppet Environment screen.

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.redhat_repository
Module Contents
Classes

RedHatRepositoryEntity

ShowAllRepositories

Navigate to the page that contains Red Hat products repositories

class airgun.entities.redhat_repository.RedHatRepositoryEntity(browser)
endpoint_path = /redhat_repositories
search(value, category='Available', types=None)

Search RH repositories.

Parameters
  • value (str) – The value to search by.

  • category (str) – The repository category to search, options: Available, Enabled, Both

  • types (list[str]) – (optional) The repository content types to refine the search. eg: RPM, OSTree …

read(entity_name=None, category='Available', recommended_repo=None)

Read RH Repositories values.

Parameters
  • entity_name – The repository name

  • category – The repository category to search, options: Available, Enabled

  • recommended_repo – on/off RH recommended repositories

enable(entity_name, arch, version=None)

Enable a redhat repository.

Parameters
  • entity_name (str) – The RH repository set name.

  • arch (str) – The system target repository architecture.

  • version (str) – (optional) The OS release version if mandatory for this repository.

disable(entity_name, orphaned=False)

Disable a redhat repository.

Parameters
  • entity_name (str) – The RH repository name

  • orphaned (bool) – Whether the repository is Orphaned

class airgun.entities.redhat_repository.ShowAllRepositories(obj, navigate_obj, logger=None)

Navigate to the page that contains Red Hat products repositories

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.report_template
Module Contents
Classes

ReportTemplateEntity

ShowAllReportTemplates

Navigate to all Report Templates screen.

AddNewReportTemplate

Navigate to Create new Report Template screen.

EditReportTemplate

Navigate to Edit Report Template screen.

CloneReportTemplate

Navigate to Create Report Template screen for cloned entity

GenerateReportTemplate

Navigate to Generate a Report Template.

class airgun.entities.report_template.ReportTemplateEntity(browser)
endpoint_path = /templates/report_templates
create(values)

Create new report template

search(value)

Search for existing report template

read(entity_name, widget_names=None)

Read report template values

clone(entity_name, values)

Clone existing report template

lock(entity_name)

Lock report template for editing

unlock(entity_name)

Unlock report template for editing

is_locked(entity_name)

Check if report template is locked for editing

export(entity_name)

Export report template.

Return str

path to saved file

generate(entity_name, values={})

Generate report template

Return str

path to saved file

schedule(entity_name, values={})

Schedule report template

update(entity_name, values)

Update report template

delete(entity_name)

Delete report template

class airgun.entities.report_template.ShowAllReportTemplates(obj, navigate_obj, logger=None)

Navigate to all Report Templates screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.report_template.AddNewReportTemplate(obj, navigate_obj, logger=None)

Navigate to Create new Report Template screen.

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.report_template.EditReportTemplate(obj, navigate_obj, logger=None)

Navigate to Edit Report Template screen.

Parameters

entity_name – name of report template to edit

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.report_template.CloneReportTemplate(obj, navigate_obj, logger=None)

Navigate to Create Report Template screen for cloned entity

Parameters

entity_name – name of report template to clone

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.report_template.GenerateReportTemplate(obj, navigate_obj, logger=None)

Navigate to Generate a Report Template.

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.repository
Module Contents
Classes

RepositoryEntity

ShowAllRepositories

Navigate to All Product Repositories page by pressing 'Repositories'

AddNewRepository

Navigate to Create Product Repository page

EditRepository

Navigate to Edit Product Repository page

SyncRepository

Trigger repository synchronization and proceed to product task details

RepositoryPackages

Open repository details page and click 'Packages' link from 'Content

class airgun.entities.repository.RepositoryEntity(browser)
property global_default_http_proxy

Look up the default http proxy and return the string that a user would select for HTTP Proxy Policy when creating or updating a repository.

create(product_name, values)

Create new repository for product

search(product_name, value)

Search for specific product repository

read(product_name, entity_name, widget_names=None)

Read values for repository

update(product_name, entity_name, values)

Update product repository values

upload_content(product_name, entity_name, file_name)

Upload a new content to existing repository

delete(product_name, entity_name)

Delete specific product repository

synchronize(product_name, entity_name)

Synchronize repository

remove_all_packages(product_name, entity_name)

Remove all packages from repository

class airgun.entities.repository.ShowAllRepositories(obj, navigate_obj, logger=None)

Navigate to All Product Repositories page by pressing ‘Repositories’ Tab on Product Edit View page

Parameters

product_name – name of product

VIEW
am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.repository.AddNewRepository(obj, navigate_obj, logger=None)

Navigate to Create Product Repository page

Parameters

product_name – name of product

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.repository.EditRepository(obj, navigate_obj, logger=None)

Navigate to Edit Product Repository page

Parameters
  • product_name – name of product

  • entity_name – name of repository

VIEW
am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.repository.SyncRepository(obj, navigate_obj, logger=None)

Trigger repository synchronization and proceed to product task details page

Parameters
  • product_name – name of product

  • entity_name – name of repository

VIEW
am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.repository.RepositoryPackages(obj, navigate_obj, logger=None)

Open repository details page and click ‘Packages’ link from ‘Content Counts’ table to proceed to Packages page.

Parameters
  • product_name – name of product

  • entity_name – name of repository

VIEW
am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.rhsso_login
Module Contents
Classes

RHSSOLoginEntity

NavigateToLogin

AirGun's version of navmazing.NavigateStep with custom

class airgun.entities.rhsso_login.RHSSOLoginEntity(browser)
login(values, external_login=False, totp=None)
logout()
get_two_factor_login_code(values, url)
class airgun.entities.rhsso_login.NavigateToLogin(obj, navigate_obj, logger=None)

AirGun’s version of navmazing.NavigateStep with custom implementations of navmazing.NavigateStep.am_i_here and navmazing.NavigateStep.go and ability to work with views.

VIEW
am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

airgun.entities.role
Module Contents
Classes

RoleEntity

ShowAllRoles

Navigate to All Roles page

AddNewRole

Navigate to Create New Role page

EditRole

Navigate to Edit Role page

CloneRole

Navigate to Clone Role page

class airgun.entities.role.RoleEntity(browser)
endpoint_path = /roles
create(values)

Create new role

search(value)
read(entity_name, widget_names=None)

Read role values

update(entity_name, values)

Update role with provided values

delete(entity_name)

Delete role from the system

clone(entity_name, values)

Clone role with entity_name with new properties values

class airgun.entities.role.ShowAllRoles(obj, navigate_obj, logger=None)

Navigate to All Roles page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.role.AddNewRole(obj, navigate_obj, logger=None)

Navigate to Create New Role page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.role.EditRole(obj, navigate_obj, logger=None)

Navigate to Edit Role page

Parameters

entity_name – name of role

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.role.CloneRole(obj, navigate_obj, logger=None)

Navigate to Clone Role page

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.settings
Module Contents
Classes

SettingsEntity

ShowAllSettings

Navigate to All Settings page

class airgun.entities.settings.SettingsEntity(browser)
endpoint_path = /settings
search(value)

Search for necessary settings entry

read(property_name)

Read settings values

update(property_name, value)

Update setting property with provided value

send_test_mail(property_name)

Send the mail to the recipient

permission_denied()

Return permission denied error text

class airgun.entities.settings.ShowAllSettings(obj, navigate_obj, logger=None)

Navigate to All Settings page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.smart_class_parameter
Module Contents
Classes

SmartClassParameterEntity

ShowAllSmartClassParameters

Navigate to All Smart Class Parameter screen.

EditSmartClassParameter

Navigate to Edit Smart Class Parameter screen.

class airgun.entities.smart_class_parameter.SmartClassParameterEntity(browser)
endpoint_path = /foreman_puppet/puppetclass_lookup_keys
search(value)

Search for smart class parameter entity and return table row that contains that entity

read(entity_name, widget_names=None)

Read all values for existing smart class parameter entity

update(entity_name, values)

Update specific smart class parameter values

class airgun.entities.smart_class_parameter.ShowAllSmartClassParameters(obj, navigate_obj, logger=None)

Navigate to All Smart Class Parameter screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.smart_class_parameter.EditSmartClassParameter(obj, navigate_obj, logger=None)

Navigate to Edit Smart Class Parameter screen.

Parameters

entity_name – name of smart class parameter

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.subnet
Module Contents
Classes

SubnetEntity

ShowAllSubnets

Navigate to All Subnets screen.

AddNewSubnet

Navigate to Create new Subnet screen.

EditSubnet

Navigate to Edit Subnet screen.

class airgun.entities.subnet.SubnetEntity(browser)
endpoint_path = /subnets
create(values)

Create new subnet

search(value)

Search for specific subnet

read(entity_name, widget_names=None)

Read values for existing subnet

update(entity_name, values)

Update subnet values

delete(entity_name)

Delete subnet

class airgun.entities.subnet.ShowAllSubnets(obj, navigate_obj, logger=None)

Navigate to All Subnets screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.subnet.AddNewSubnet(obj, navigate_obj, logger=None)

Navigate to Create new Subnet screen.

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.subnet.EditSubnet(obj, navigate_obj, logger=None)

Navigate to Edit Subnet screen.

Parameters

entity_name – name of subnet

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.subscription
Module Contents
Classes

SubscriptionEntity

SubscriptionNavigationStep

To ensure that we reached the destination, some targets need extra post navigation tasks

SubscriptionList

Navigate to Subscriptions main page

ManageManifest

Navigate to 'Manage Manifest' dialog box on Subscriptions main page

DeleteManifestConfirmation

Navigate to 'Delete Manifest Confirmation' dialog box on

AddSubscription

Navigate to Add Subscriptions page

SubscriptionDetails

Navigate to Subscriptions' Details page

class airgun.entities.subscription.SubscriptionEntity(browser)
endpoint_path = /subscriptions
_wait_for_process_to_finish(name, has_manifest=False, timeout=600, ignore_error_messages=None)

Helper ensuring that task (upload / delete manifest / subscription) has finished. Run after action invoking task to leave Satellite in usable state. Currently waits for three events. Since page is written asynchronously, they can happen in any order. :param name: Name of running task :param has_manifest: Should manifest exist after task ended? :param timeout: Waiting timeout :param ignore_error_messages: A List of strings representing the error messages to ignore.

property has_manifest

Is there manifest present in current organization? :return: boolean value indicating whether manifest is present May be None if user can’t verify reliably if manifest is uploaded or not due to missing permissions

add_manifest(manifest_file, ignore_error_messages=None)

Upload manifest file :param manifest_file: Path to manifest file :param ignore_error_messages: List of error messages to ignore

refresh_manifest()

Refresh manifest

delete_manifest(ignore_error_messages=None)

Delete manifest from current organization

read_delete_manifest_message()

Read message displayed on ‘Confirm delete manifest’ dialog

add(entity_name, quantity=1)

Attach new subscriptions :param entity_name: Name of subscription to attach :param quantity: Number of subscriptions to attach

search(value)

search for subscription

filter_columns(columns=None)

Filters column headers :param columns: dict mapping column name to boolean value :return: tuple of the name of the headers

provided_products(entity_name, virt_who=False)

Read list of all products provided by subscription. :param entity_name: Name of subscription :param virt_who: Whether this is a virt who client subscription. :return: List of strings with product names

content_products(entity_name, virt_who=False)

Read list of products provided by subscription for subscribed content hosts. :param entity_name: Name of subscription :param virt_who: Whether this is a virt who client subscription. :return: List of strings with product names (may be empty)

abstract update(entity_name, values)

Stub method provided for consistency with other Airgun entities. This operation was never implemented in Robottelo (no test requires it).

delete(entity_name)

Remove subscription :param entity_name: Name of subscription

class airgun.entities.subscription.SubscriptionNavigationStep(obj, navigate_obj, logger=None)

To ensure that we reached the destination, some targets need extra post navigation tasks

post_navigate(_tries, *args, **kwargs)

Describes steps that takes place before any prerequisite after navigation takes place.

This is a default and is generally overridden.

class airgun.entities.subscription.SubscriptionList(obj, navigate_obj, logger=None)

Navigate to Subscriptions main page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.subscription.ManageManifest(obj, navigate_obj, logger=None)

Navigate to ‘Manage Manifest’ dialog box on Subscriptions main page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.subscription.DeleteManifestConfirmation(obj, navigate_obj, logger=None)

Navigate to ‘Delete Manifest Confirmation’ dialog box on Subscriptions main page Dialog box appearance is animated. wait_for ensures that we interact with content only after animation has finished

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.subscription.AddSubscription(obj, navigate_obj, logger=None)

Navigate to Add Subscriptions page

VIEW
prerequisite
am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.subscription.SubscriptionDetails(obj, navigate_obj, logger=None)

Navigate to Subscriptions’ Details page

Parameters
  • entity_name – name of Subscription

  • virt_who – Whether this is a virt who client subscription.

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.sync_status
Module Contents
Classes

SyncStatusEntity

ShowAllHostCollections

AirGun's version of navmazing.NavigateStep with custom

class airgun.entities.sync_status.SyncStatusEntity(browser)
endpoint_path = /katello/sync_management
read(widget_names=None)

Read all widgets at Sync status entity

synchronize(repository_paths, timeout=3600)

Synchronize repositories

Parameters
  • repository_paths – A list of repositories to synchronize where each element of the list is path to repository represented by a list or tuple.

  • timeout – time to wait for all repositories to be synchronized.

Usage:

synchronize([('product1', 'repo1'),
             ('product1', 'repo2'),
             ('product2', 'repo2'),
             ('Red Hat Enterprise Linux Server', '7.5', 'x86_64',
              'Red Hat Enterprise Linux 7 Server RPMs x86_64 7.5'),
             ('Red Hat Satellite Capsule',
              'Red Hat Satellite Capsule 6.2 for RHEL 7 Server RPMs x86_64')])
Returns

the results text in RESULT columns

class airgun.entities.sync_status.ShowAllHostCollections(obj, navigate_obj, logger=None)

AirGun’s version of navmazing.NavigateStep with custom implementations of navmazing.NavigateStep.am_i_here and navmazing.NavigateStep.go and ability to work with views.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.sync_templates
Module Contents
Classes

SyncTemplatesEntity

SyncMainPageNavigation

Navigate to Import/Export Templates page

SyncTemplatesActionNavigation

Navigate to Import/Export Templates page

class airgun.entities.sync_templates.SyncTemplatesEntity(browser)
endpoint_path = /template_syncs
sync(values)

Import Export Switch Action Entity

class airgun.entities.sync_templates.SyncMainPageNavigation(obj, navigate_obj, logger=None)

Navigate to Import/Export Templates page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.sync_templates.SyncTemplatesActionNavigation(obj, navigate_obj, logger=None)

Navigate to Import/Export Templates page

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

airgun.entities.syncplan
Module Contents
Classes

SyncPlanEntity

ShowAllSyncPlans

Navigate to All Sync Plans screen.

AddNewSyncPlan

Navigate to New Sync Plan screen.

EditSyncPlan

Navigate to Edit Sync Plan screen.

class airgun.entities.syncplan.SyncPlanEntity(browser)
endpoint_path = /sync_plans
create(values)

Create new sync plan

delete(entity_name)

Delete existing sync plan

search(value)

Search for sync plan

read(entity_name, widget_names=None)

Read values for created sync plan

update(entity_name, values)

Update sync plan with necessary values

add_product(entity_name, products_list)

Add product to sync plan

Parameters
  • entity_name (str) – sync plan name

  • products_list – either one or list of products

remove_product(entity_name, products_list)

Remove product from sync plan

Parameters
  • entity_name (str) – sync plan name

  • products_list – either one or list of products

class airgun.entities.syncplan.ShowAllSyncPlans(obj, navigate_obj, logger=None)

Navigate to All Sync Plans screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.syncplan.AddNewSyncPlan(obj, navigate_obj, logger=None)

Navigate to New Sync Plan screen.

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.syncplan.EditSyncPlan(obj, navigate_obj, logger=None)

Navigate to Edit Sync Plan screen.

Parameters

entity_name – name of sync plan

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.task
Module Contents
Classes

TaskEntity

ShowAllTasks

Navigate to All Tasks page

TaskDetails

Navigate to Task Details screen.

class airgun.entities.task.TaskEntity(browser)
endpoint_path = /foreman_tasks/tasks
search(value)

Search for specific task

read_all(widget_names=None)

Read all tasks widgets values from the title page. Or read specific widgets by adding ‘widget_names’ parameter

read(entity_name, widget_names=None)

Read specific task values from details page

set_chart_filter(chart_name, index=None)

Remove filter from searchbox and set filter from specific chart

Parameters

index – index in ‘StoppedChart’ table, dict with ‘row’ number and ‘focus’ as column name

total_items()

Get total items displayed in the table

class airgun.entities.task.ShowAllTasks(obj, navigate_obj, logger=None)

Navigate to All Tasks page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.task.TaskDetails(obj, navigate_obj, logger=None)

Navigate to Task Details screen.

Parameters

entity_name – name of the task

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.user
Module Contents
Classes

UserEntity

ShowAllUsers

Navigate to All Users page

AddNewUser

Navigate to Create User page

EditUser

Navigate to Edit User page

class airgun.entities.user.UserEntity(browser)
endpoint_path = /users
create(values)

Create new user entity

search(value)

Search for user entity

read(entity_name, widget_names=None)

Read all values for created user entity

update(entity_name, values)

Update necessary values for user

delete(entity_name)

Remove existing user entity

class airgun.entities.user.ShowAllUsers(obj, navigate_obj, logger=None)

Navigate to All Users page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.user.AddNewUser(obj, navigate_obj, logger=None)

Navigate to Create User page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.user.EditUser(obj, navigate_obj, logger=None)

Navigate to Edit User page

Parameters

entity_name – name of the user

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.usergroup
Module Contents
Classes

UserGroupEntity

ShowAllUserGroups

Navigate to All User Groups page

AddNewUserGroup

Navigate to Create User Group page

EditUserGroup

Navigate to Edit User Group page

class airgun.entities.usergroup.UserGroupEntity(browser)
endpoint_path = /usergroups
create(values)

Create new user group entity

search(value)

Search for user group entity

read(entity_name, widget_names=None)

Read all values for created user group entity

update(entity_name, values)

Update necessary values for user group

delete(entity_name)

Remove existing user group entity

refresh_external_group(entity_name, external_group_name)

Refresh external group.

class airgun.entities.usergroup.ShowAllUserGroups(obj, navigate_obj, logger=None)

Navigate to All User Groups page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.usergroup.AddNewUserGroup(obj, navigate_obj, logger=None)

Navigate to Create User Group page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.usergroup.EditUserGroup(obj, navigate_obj, logger=None)

Navigate to Edit User Group page

Parameters

entity_name – name of the user group

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.virtwho_configure
Module Contents
Classes

VirtwhoConfigureEntity

ShowAllVirtwhoConfigures

Navigate to All Activation Keys page

AddNewVirtwhoConfigure

Navigate to New Virtwho Configure page

EditExistingVirtwhoConfigure

Navigate to Edit Virtwho Configure page

DetailsVirtwhoConfigure

Navigate to Details page by clicking on necessary name in the table

class airgun.entities.virtwho_configure.VirtwhoConfigureEntity(browser)
endpoint_path = /foreman_virt_who_configure/configs
_reset_values(values)
check_create_permission()

Check if the config can be viewed/created

check_update_permission(entity_name=None)

Check if the config can be deleted/edited

create(values)

Create new virtwho configure entity

search(value)

Search for virtwho configure

edit(name, values)

Edit specific virtwho configure values

read(entity_name, widget_names=None)

Read all values for existing virtwho configure entity

delete(value)

Delete specific virtwho configure

class airgun.entities.virtwho_configure.ShowAllVirtwhoConfigures(obj, navigate_obj, logger=None)

Navigate to All Activation Keys page

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.virtwho_configure.AddNewVirtwhoConfigure(obj, navigate_obj, logger=None)

Navigate to New Virtwho Configure page

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.virtwho_configure.EditExistingVirtwhoConfigure(obj, navigate_obj, logger=None)

Navigate to Edit Virtwho Configure page

Parameters

entity_name – name of the virtwho configure

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.virtwho_configure.DetailsVirtwhoConfigure(obj, navigate_obj, logger=None)

Navigate to Details page by clicking on necessary name in the table

Parameters

entity_name – name of the configure

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.entities.webhook
Module Contents
Classes

WebhookEntity

ShowAllWebhooks

Navigate to All Webhooks screen.

AddNewWebhook

Navigate to Create Webhook page.

EditWebhook

Navigate to Edit Webhook page.

DeleteWebhook

Search for Webhook and confirm deletion in dialog.

class airgun.entities.webhook.WebhookEntity(browser)
endpoint_path = /webhooks
create(values)

Create new Webhook

Parameters

values – Parameters to be assigned to a Webhook, Name, Subscribe to, Target URL, Template and HTTP Method should be provided

delete(entity_name)

Delete corresponding Webhook

Parameters

entity_name (str) – name of the corresponding Webhook

search(entity_name)

Search for a specific Webhook

read(entity_name, widget_names=None)

Reads content of corresponding Webhook

Parameters

entity_name (str) – name of the corresponding Webhook

Returns

dict representing tabs, with nested dicts representing fields and values

update(entity_name, values)

Update existing Webhook

Parameters
  • entity_name (str) – name of the corresponding Webhook

  • values – parameters to be changed at Webhook

class airgun.entities.webhook.ShowAllWebhooks(obj, navigate_obj, logger=None)

Navigate to All Webhooks screen.

VIEW
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.webhook.AddNewWebhook(obj, navigate_obj, logger=None)

Navigate to Create Webhook page.

VIEW
prerequisite
step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.webhook.EditWebhook(obj, navigate_obj, logger=None)

Navigate to Edit Webhook page.

Parameters

entity_name – name of the Webhook

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

class airgun.entities.webhook.DeleteWebhook(obj, navigate_obj, logger=None)

Search for Webhook and confirm deletion in dialog.

Parameters

entity_name – name of the Webhook

VIEW
prerequisite(*args, **kwargs)

Describes a step that must be carried our prior to this one.

This often calls a previous navigate_to, often using one of the helpers, NavigateToSibling which will navigate to a given destination using the same object, or NavigateToAttribute which will navigate to a destination against an object describe by the attribute of the parent object.

This is a default and is generally overridden.

step(*args, **kwargs)

Describes the work to be done to get to the destination after the prequisite is met.

This is a default and is generally overridden.

airgun.helpers
Submodules
airgun.helpers.base
Module Contents
Classes

BaseEntityHelper

class airgun.helpers.base.BaseEntityHelper(entity: airgun.entities.base.BaseEntity)
property entity
read_filled_view(navigation_name: str, navigation_kwargs: Dict = None, values: Dict[str, Any] = None, read_widget_names: List[str] = None) Dict[str, Any]

Navigate to a form using ‘navigation_name’ and with parameters from ‘navigation_kwargs’, fill the form with values and then read values for widgets from ‘read_widget_names’ list if supplied otherwise read all widgets values.

Usage:

# In host entity: open create view, click host.reset_puppet_environment button and read
# host.puppet_environment
session.host.helper.read_filled_view(
    'New',
    values={'host.reset_puppet_environment': True},
    read_widget_names=['host.puppet_environment'],
)
airgun.helpers.host
Module Contents
Classes

HostHelper

class airgun.helpers.host.HostHelper(entity: airgun.entities.base.BaseEntity)
read_create_view(values, read_widget_names=None)

Open create host view, fill entity fields with supplied values, and then return widgets values. Read values from ‘read_widget_names’ list if provided otherwise read values from all view widgets.

airgun.views
Submodules
airgun.views.activationkey
Module Contents
Classes

ActivationKeysView

View for the ActivationKeys page

ActivationKeyCreateView

View for the ActivationKeys Create page

ActivationKeyEditView

View for the ActivationKeys Edit page

class airgun.views.activationkey.ActivationKeysView(parent, logger=None, **kwargs)

View for the ActivationKeys page

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.activationkey.ActivationKeyCreateView(parent, logger=None, **kwargs)

View for the ActivationKeys Create page

breadcrumb
name
hosts_limit
description
lce
content_view
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.activationkey.ActivationKeyEditView(parent, logger=None, **kwargs)

View for the ActivationKeys Edit page

class details(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

name
description
hosts_limit
service_level
lce
content_view
class subscriptions(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class repository_sets(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Repository Sets
table
class host_collections(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Host Collections
resources
class content_hosts(parent, logger=None, **kwargs)

Regular primary level Tab with dropdown.

Usage:

@View.nested
class mytab(SatTabWithDropdown):
    TAB_NAME = 'My Tab'
    SUB_ITEM = 'My Tab Dropdown Item'
TAB_NAME = Associations
SUB_ITEM = Content Hosts
table
breadcrumb
actions
dialog
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.ansible_role
Module Contents
Classes

ImportPagination

Represents Paginator widget that includes per page selector, First/Last/Next/Prev buttons

AnsibleRolesView

Main Ansible Roles view. Prior to importing any roles, only the import_button

AnsibleRolesImportView

View while selecting Ansible roles to import.

class airgun.views.ansible_role.ImportPagination(parent, logger=None, **kwargs)

Represents Paginator widget that includes per page selector, First/Last/Next/Prev buttons and current page index/overall amount of pages. Mainly used with Table widget.

PER_PAGE_BUTTON_DROPDOWN = .//div[button[@id='pagination-options-menu-toggle-2']]
total_items
class airgun.views.ansible_role.AnsibleRolesView(parent, logger=None, **kwargs)

Main Ansible Roles view. Prior to importing any roles, only the import_button is present, without the search widget or table.

title
import_button
submit
total_imported_roles
table
pagination
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.ansible_role.AnsibleRolesImportView(parent, logger=None, **kwargs)

View while selecting Ansible roles to import.

breadcrumb
total_available_roles
select_all
table
pagination
submit
cancel
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.ansible_variable
Module Contents
Classes

AnsibleVariablesView

Main Ansible Variables view

MatcherTable

Name-Value paired input elements which can be added, edited or removed.

MatcherActions

Interface table has Attribute type column that contains select field and

NewAnsibleVariableView

View while creating a new Ansible Variable

class airgun.views.ansible_variable.AnsibleVariablesView(parent, logger=None, **kwargs)

Main Ansible Variables view

title
new_variable
total_variables
table
pagination
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.ansible_variable.MatcherTable(parent, **kwargs)

Name-Value paired input elements which can be added, edited or removed.

It is essentially a table with text input widgets on each row, with an “Add New Parameter” button on the same page.

Example html representation:

<table class="table" id="global_parameters_table">
    <tr class="fields " id="new_os_parameter_row">
        <input placeholder="Name" type="text" ... id="..._name">
        <textarea id="new_os_parameter_value" placeholder="Value" ...>

Locator example:

//input[@placeholder='Name']
//textarea[@placeholder='Value']
add_new_value
class airgun.views.ansible_variable.MatcherActions(parent, logger=None, **kwargs)

Interface table has Attribute type column that contains select field and text input field.

matcher_key
matcher_value
class airgun.views.ansible_variable.NewAnsibleVariableView(parent, logger=None, **kwargs)

View while creating a new Ansible Variable

class matcher_section(parent, logger=None, **kwargs)

‘Specify Matchers’ section

add_matcher
params
before_fill(values)

A hook invoked before the loop of filling is invoked.

If it returns None, the was_changed in fill() does not change. If it returns a boolean, then on True it modifies the was_changed to True as well.

Parameters

values – The same values that are passed to fill()

breadcrumb
key
description
ansible_role
override
parameter_type
default_value
hidden_value
expand_optional_input_validator
required
validator_type
validator_rule
attribute_order
merge_overrides
merge_default
avoid_duplicates
submit
cancel
property expand_button

Return the Optional Input Validator section expander element

property expanded

Check whether this section is expanded

expand()

Expand the Optional Input Validator section

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.architecture
Module Contents
Classes

ArchitecturesView

Base view for Satellite pages

ArchitectureDetailsView

Base view for Satellite pages

ArchitectureCreateView

Base view for Satellite pages

class airgun.views.architecture.ArchitecturesView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.architecture.ArchitectureDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
name
submit
operatingsystems
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.architecture.ArchitectureCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.audit
Module Contents
Classes

AuditEntry

View is a kind of abstract widget that can hold another widgets. Remembers the order,

AuditsView

Base view for Satellite pages

class airgun.views.audit.AuditEntry(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = .//div[@id='audit-list']/div/div[contains(@class, 'list-group-item')]
user
action_type
resource_type
resource_name
created_at
expander
affected_organization
affected_location
action_summary
comment
property expanded
read()

Reads the contents of the view and presents them as a dictionary.

Returns

A dict of widget_name: widget_read_value where the values are retrieved using the Widget.read().

fill(values)

Implementation of form filling.

This method goes through all widgets defined on this view one by one and calls their fill methods appropriately.

None values will be ignored.

It will log any skipped fill items. It will log a warning if you pass any extra values for filling.

It will store the fill value in last_fill_data. The data will be “deflattened” to ensure uniformity.

Parameters

values – A dictionary of widget_name: value_to_fill.

Returns

bool if the fill changed any value.

class airgun.views.audit.AuditsView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
searchbox
entry
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

search(query)
airgun.views.bookmark
Module Contents
Classes

BookmarksView

Base view for Satellite pages

BookmarkEditView

Base view for Satellite pages

class airgun.views.bookmark.BookmarksView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.bookmark.BookmarkEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
name
query
public
submit
cancel
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.cloud_insights
Module Contents
Classes

CloudTokenView

RH Cloud Insights Landing page for adding RH Cloud Token.

RemediationView

Remediation window view

CloudInsightsView

Main RH Cloud Insights view.

class airgun.views.cloud_insights.CloudTokenView(parent, logger=None, **kwargs)

RH Cloud Insights Landing page for adding RH Cloud Token.

rhcloud_token
save_token
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.cloud_insights.RemediationView(parent: widgetastic.types.ViewParent, component_id: str = '', logger: Optional[logging.Logger] = None, **kwargs)

Remediation window view

OUIA_ID = OUIA-Generated-Modal-large-1
remediate
cancel
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.cloud_insights.CloudInsightsView(parent, logger=None, **kwargs)

Main RH Cloud Insights view.

title
insights_sync_switcher
remediate
insights_dropdown
select_all
table
select_all_hits
clear_hits_selection
pagination
remediation_window
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

search(query)

Perform search using searchbox on the page and return table contents.

Parameters

query (str) – search query to type into search field. E.g. foo or name = "bar".

Returns

list of dicts representing table rows

Return type

list

airgun.views.cloud_inventory
Module Contents
Classes

InventoryTab

Cloud Inventory Upload Tab element.

InventoryItemsView

Item related to one organization on Cloud Inventory Upload page.

CloudInventoryListView

Main RH Cloud Inventory Upload view.

class airgun.views.cloud_inventory.InventoryTab(parent, logger=None, **kwargs)

Cloud Inventory Upload Tab element.

This is lightweight subclass needed because Cloud Inventory Upload tabs contain icons, and widgetastic_patternfly Tab looks for exact match.

TAB_LOCATOR
child_widget_accessed(widget)

This hook is called when a child widget of current view is accessed.

One of useful examples is below. it allows us to switch between frames.

Parameters

widget – The widget being accessed or ParametrizedViewRequest.

class airgun.views.cloud_inventory.InventoryItemsView(parent=None, id=None, locator=None, logger=None)

Item related to one organization on Cloud Inventory Upload page.

class generating(parent, logger=None, **kwargs)

Cloud Inventory Upload Tab element.

This is lightweight subclass needed because Cloud Inventory Upload tabs contain icons, and widgetastic_patternfly Tab looks for exact match.

process
restart
terminal
scheduled_run
class uploading(parent, logger=None, **kwargs)

Cloud Inventory Upload Tab element.

This is lightweight subclass needed because Cloud Inventory Upload tabs contain icons, and widgetastic_patternfly Tab looks for exact match.

process
download_report
terminal
ROOT = .//dl[contains(@class, "pf-c-accordion account-list")]
DESCRIPTION_LOCATOR = .//span[contains(@class, "pf-c-label pf-m-blue pf-m-outline account-icon")]
STATUS_ELEMENTS = .//div[contains(@class, "status")]/div[contains(@class, "item")]
property is_generating
property is_uploading
property status
property is_active
child_widget_accessed(widget)

This hook is called when a child widget of current view is accessed.

One of useful examples is below. it allows us to switch between frames.

Parameters

widget – The widget being accessed or ParametrizedViewRequest.

read(widget_names=None)

Reads the contents of the view and presents them as a dictionary.

Returns

A dict of widget_name: widget_read_value where the values are retrieved using the Widget.read().

fill(values)

Implementation of form filling.

This method goes through all widgets defined on this view one by one and calls their fill methods appropriately.

None values will be ignored.

It will log any skipped fill items. It will log a warning if you pass any extra values for filling.

It will store the fill value in last_fill_data. The data will be “deflattened” to ensure uniformity.

Parameters

values – A dictionary of widget_name: value_to_fill.

Returns

bool if the fill changed any value.

class airgun.views.cloud_inventory.CloudInventoryListView(parent, logger=None, **kwargs)

Main RH Cloud Inventory Upload view.

title
auto_update
obfuscate_hostnames
obfuscate_ips
exclude_packages
cloud_connector
reconfigure_cloud_connector
sync_status
inventory_list
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

read(widget_names=None)

Reads the contents of the view and presents them as a dictionary.

Parameters

widget_names – If specified, will read only the widgets names in the list.

Returns

A dict of widget_name: widget_read_value where the values are retrieved using the Widget.read().

airgun.views.common
Module Contents
Classes

BaseLoggedInView

Base view for Satellite pages

WrongContextAlert

Alert screen which appears when switching organization while organization-specific entity is

SatTab

Regular primary level Tab.

SatVerticalTab

Represent vertical tabs that usually used in location and organization

SatTabWithDropdown

Regular primary level Tab with dropdown.

SatSecondaryTab

Secondary level Tab, typically 'List/Remove' or 'Add' sub-tab inside

LCESelectorGroup

Group of airgun.widgets.LCESelector, typically present on page

ListRemoveTab

'List/Remove' tab, part of AddRemoveResourcesView.

AddTab

Secondary level Tab, typically 'List/Remove' or 'Add' sub-tab inside

AddRemoveResourcesView

View which allows assigning/unassigning some resources to entity.

AddRemoveSubscriptionsView

A variant of AddRemoveResourcesView for managing subscriptions.

TemplateEditor

Default view for template entity editor that can be present for example

SearchableViewMixin

Mixin which adds airgun.widgets.Search widget and

SearchableViewMixinPF4

Mixin which adds airgun.widgets.Search widget and

TaskDetailsView

Common view for task details screen. Can be found for most of tasks for

BookmarkCreateView

Bookmark creation modal window, available via searchbox dropdown ->

TemplateInputItem

Template Input item view

class airgun.views.common.BaseLoggedInView(parent, logger=None, **kwargs)

Base view for Satellite pages

menu
taxonomies
flash
validations
dialog
logout
current_user
account_menu
permission_denied
select_logout()

logout from satellite

read(widget_names=None)

Reads the contents of the view and presents them as a dictionary.

Parameters

widget_names – If specified, will read only the widgets names in the list.

Returns

A dict of widget_name: widget_read_value where the values are retrieved using the Widget.read().

class airgun.views.common.WrongContextAlert(parent, logger=None, **kwargs)

Alert screen which appears when switching organization while organization-specific entity is opened.

message
back
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.common.SatTab(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

ROOT
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

read()

Do not attempt to read hidden tab contents

class airgun.views.common.SatVerticalTab(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
TAB_LOCATOR
class airgun.views.common.SatTabWithDropdown(parent, logger=None, **kwargs)

Regular primary level Tab with dropdown.

Usage:

@View.nested
class mytab(SatTabWithDropdown):
    TAB_NAME = 'My Tab'
    SUB_ITEM = 'My Tab Dropdown Item'
ROOT
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

read()

Do not attempt to read hidden tab contents

class airgun.views.common.SatSecondaryTab(parent, logger=None, **kwargs)

Secondary level Tab, typically ‘List/Remove’ or ‘Add’ sub-tab inside some primary tab.

Usage:

@View.nested
class listremove(SatSecondaryTab):
    TAB_NAME = 'List/Remove'
ROOT
TAB_LOCATOR
class airgun.views.common.LCESelectorGroup(parent, logger=None, **kwargs)

Group of airgun.widgets.LCESelector, typically present on page for selecting desired lifecycle environment.

Usage:

lce = View.nested(LCESelectorGroup)

#or

@View.nested
class lce(LCESelectorGroup):
    pass
ROOT = .//*[self::div or self::span][@path-selector='environments' or @path-selector='availableEnvironments']
PARAMETERS = ['lce_name']
LAST_ENV = .//div[contains(@class, 'path-selector')]/ul/li[last()]
lce
classmethod all(browser)

Helper method which returns list of tuples with all LCESelector names (last available environment is used as a name). It’s required for read() to work properly.

fill(values=None)

Shortcut to pass the value to included lce

airgun.widgets.LCESelector widget. Usage remains the same as airgun.widgets.LCESelector and widgetastic.widget.ParametrizedView required param is filled automatically from passed lifecycle environment’s name.

Usage:

my_view.lce.fill({'PROD': True})
my_view.lce.fill({'PROD': 'Library'})

Value True or False means to set corresponding checkbox value to the last checkbox available in widget (last lifecycle environment). If you want to select different lifecycle environment within the same route - pass its name as a value instead

read()

Shortcut which returns value of included lce

airgun.widgets.LCESelector widget.

Note that returned result will be wrapped in extra dict due to widgetastic.widget.ParametrizedView nature:

{
    'DEV': {'Library': False, 'DEV': True},
    'QA': {'Library': False, 'IT': True},
    'PROD': {'Library': False, 'PROD': True},
}
class airgun.views.common.ListRemoveTab(parent, logger=None, **kwargs)

‘List/Remove’ tab, part of AddRemoveResourcesView.

TAB_NAME = List/Remove
searchbox
remove_button
table
search(value)

Search for specific associated resource and return the results

remove(value)

Remove specific associated resource

fill(values)

Remove associated resource(s).

read()

Return a list of associated resources

class airgun.views.common.AddTab(parent, logger=None, **kwargs)

Secondary level Tab, typically ‘List/Remove’ or ‘Add’ sub-tab inside some primary tab.

Usage:

@View.nested
class listremove(SatSecondaryTab):
    TAB_NAME = 'List/Remove'
TAB_NAME = Add
searchbox
add_button
table
search(value)

Search for specific available resource and return the results

add(value)

Associate specific resource

fill(values)

Associate resource(s)

read()

Return a list of available resources

class airgun.views.common.AddRemoveResourcesView(parent, logger=None, **kwargs)

View which allows assigning/unassigning some resources to entity. Contains two secondary level tabs ‘List/Remove’ and ‘Add’ with tables allowing managing resources for entity.

Usage:

@View.nested
class resources(AddRemoveResourcesView): pass
list_remove_tab
add_tab
add(values)

Assign some resource(s).

Parameters

values (str or list) – string containing resource name or a list of such strings.

remove(values)

Unassign some resource(s).

Parameters

values (str or list) – string containing resource name or a list of such strings.

read()

Read all table values from both resource tables

class airgun.views.common.AddRemoveSubscriptionsView(parent, logger=None, **kwargs)

A variant of AddRemoveResourcesView for managing subscriptions. Subscriptions table has different structure - entity label is located in separate row apart from checkbox and other cells.

class list_remove_tab(parent, logger=None, **kwargs)

‘List/Remove’ tab, part of AddRemoveResourcesView.

table
class add_tab(parent, logger=None, **kwargs)

Secondary level Tab, typically ‘List/Remove’ or ‘Add’ sub-tab inside some primary tab.

Usage:

@View.nested
class listremove(SatSecondaryTab):
    TAB_NAME = 'List/Remove'
table
class airgun.views.common.TemplateEditor(parent, logger=None, **kwargs)

Default view for template entity editor that can be present for example on provisioning template of partition table pages. It contains from different options of content rendering and ace editor where you can actually provide your inputs

Usage:

editor = View.nested(TemplateEditor)
ROOT = .//div[@id='editor-container']
rendering_options
import_template
fullscreen
editor
class airgun.views.common.SearchableViewMixin

Mixin which adds airgun.widgets.Search widget and airgun.widgets.Search.search() to your view. It’s useful for _most_ entities list views where searchbox and results table are present.

Note that class which uses this mixin should have :attr: table attribute.

searchbox
welcome_message
is_searchable()

Verify that search procedure can be executed against specific page. That means that we have search field present on the page and that page is not a welcome one

search(query)

Perform search using searchbox on the page and return table contents.

Parameters

query (str) – search query to type into search field. E.g. foo or name = "bar".

Returns

list of dicts representing table rows

Return type

list

class airgun.views.common.SearchableViewMixinPF4

Mixin which adds airgun.widgets.Search widget and airgun.widgets.Search.search() to your view. It’s useful for _most_ entities list views

where searchbox and results table are present. Note that class which uses this mixin should have :attr: table attribute.

searchbox
blank_page
is_searchable()

Verify that search procedure can be executed against specific page that is not blank

search(query)

Perform search using searchbox on the page and return table contents.

Parameters

query (str) – search query to type into search field. E.g. foo or name = "bar".

Returns

list of dicts representing table rows

Return type

list

class airgun.views.common.TaskDetailsView(parent, logger=None, **kwargs)

Common view for task details screen. Can be found for most of tasks for various entities like Products, Repositories, Errata etc.

breadcrumb
action_type
user
started_at
finished_at
parameters
state
result
progressbar
details
class airgun.views.common.BookmarkCreateView(parent, logger=None, **kwargs)

Bookmark creation modal window, available via searchbox dropdown -> Bookmark this search.

Has slightly different style for katello and foreman pages, thus some widgets have special locators.

ROOT = .//div[contains(@class, 'modal-dialog')]
title
name
query
error_message
public
submit
cancel
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.common.TemplateInputItem(parent, locator, logger=None)

Template Input item view

class UserInputForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

advanced
options
description
class FactValueForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

fact_name
description
class VariableValueForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

variable_name
description
class PuppetParameterForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

puppet_class_name
puppet_parameter_name
description
remove_button
name
required
input_type
input_content
airgun.views.computeprofile
Module Contents
Classes

ComputeProfilesView

Base view for Satellite pages

ComputeProfileCreateView

Base view for Satellite pages

ComputeProfileDetailView

Base view for Satellite pages

ComputeProfileRenameView

Base view for Satellite pages

class airgun.views.computeprofile.ComputeProfilesView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.computeprofile.ComputeProfileCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
name
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.computeprofile.ComputeProfileDetailView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.computeprofile.ComputeProfileRenameView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.computeresource
Module Contents
Classes

ComputeResourcesView

Base view for Satellite pages

ResourceProviderCreateView

Base view for Satellite pages

ResourceProviderEditView

Base view for Satellite pages

ResourceProviderDetailView

Base view for Satellite pages

ComputeResourceLibvirtProfileNetworkItem

Libvirt Compute Resource Profile "Network interface" item widget

ComputeResourceLibvirtProfileStorageItem

Libvirt Compute Resource profile "Storage" item widget

ComputeResourceRHVProfileNetworkItem

RHV Compute Resource profile "Network interface" item widget

ComputeResourceRHVProfileStorageItem

RHV Compute Resource profile "Storage" item widget

ComputeResourceVMwareProfileNetworkItem

VMware Compute Resource Profile "Network interface" item widget

ComputeResourceVMwareProfileControllerVolumeItem

VMware Compute Resource Profile "Storage Controller Volume" item widget

ComputeResourceVMwareProfileControllerVolumeList

VMware Compute Resource Profile SCSI Controller Volumes List

ComputeResourceVMwareProfileStorageItem

VMware Compute Resource Profile Storage Controller item widget

ResourceProviderProfileView

Base view for Satellite pages

ResourceProviderVMImport

Base view for Satellite pages

ComputeResourceGenericImageCreateView

A Generic Compute Resource Image create view.

ComputeResourceGenericImageEditViewMixin

A Generic Mixin Resource Image edit view.

ComputeResourceRHVImageCreateView

RHV Compute resource Image create view.

ComputeResourceRHVImageEditView

RHV Compute resource Image edit view.

ComputeResourceVMwareImageCreateView

VMWare ComputeResource Image create View

ComputeResourceVMwareImageEditView

VMWare ComputeResource Image edit View

class airgun.views.computeresource.ComputeResourcesView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Check if the right page is displayed

class airgun.views.computeresource.ResourceProviderCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

class EC2ProviderForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class region(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

load_regions
value
before_fill(values=None)

A hook invoked before the loop of filling is invoked.

If it returns None, the was_changed in fill() does not change. If it returns a boolean, then on True it modifies the was_changed to True as well.

Parameters

values – The same values that are passed to fill()

class http_proxy(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

value
access_key
secret_key
class GCEProviderForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class zone(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

load_zones
value
before_fill(values=None)

A hook invoked before the loop of filling is invoked.

If it returns None, the was_changed in fill() does not change. If it returns a boolean, then on True it modifies the was_changed to True as well.

Parameters

values – The same values that are passed to fill()

class http_proxy(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

value
google_project_id
client_email
certificate_path
class LibvirtProviderForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

url
display_type
console_passwords
class OpenStackProviderForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

url
user
password
domain
class RackspaceProviderForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

url
user
api_key
region
class VMwareProviderForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class datacenter(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

load_datacenters
value
before_fill(values=None)

A hook invoked before the loop of filling is invoked.

If it returns None, the was_changed in fill() does not change. If it returns a boolean, then on True it modifies the was_changed to True as well.

Parameters

values – The same values that are passed to fill()

vcenter
user
password
display_type
vnc_console_passwords
enable_caching
class RHVProviderForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class datacenter(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

load_datacenters
value
before_fill(values=None)

A hook invoked before the loop of filling is invoked.

If it returns None, the was_changed in fill() does not change. If it returns a boolean, then on True it modifies the was_changed to True as well.

Parameters

values – The same values that are passed to fill()

url
user
password
certification_authorities
class compute_resource(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Compute Resource
class locations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class organizations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
breadcrumb
name
description
submit
provider
provider_content
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.computeresource.ResourceProviderEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.computeresource.ResourceProviderDetailView(parent, logger=None, **kwargs)

Base view for Satellite pages

class compute_resource(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Compute Resource
ROOT = .//div[@id='primary']
table
class virtual_machines(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Virtual Machines
ROOT = .//div[@id='vms']
actions
table
class compute_profiles(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Compute profiles
ROOT = .//div[@id='compute_profiles']
table
class images(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Images
ROOT = .//div[@id='images']
filterbox
table
breadcrumb
submit
create_image
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.computeresource.ComputeResourceLibvirtProfileNetworkItem(parent, locator, logger=None)

Libvirt Compute Resource Profile “Network interface” item widget

network_type
network
nic_type
class airgun.views.computeresource.ComputeResourceLibvirtProfileStorageItem(parent, locator, logger=None)

Libvirt Compute Resource profile “Storage” item widget

storage_pool
size
storage_type
class airgun.views.computeresource.ComputeResourceRHVProfileNetworkItem(parent, locator, logger=None)

RHV Compute Resource profile “Network interface” item widget

name
network
interface_type
class airgun.views.computeresource.ComputeResourceRHVProfileStorageItem(parent, locator, logger=None)

RHV Compute Resource profile “Storage” item widget

class bootable(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = .//input[contains(@id, 'bootable')]
_is_checked()
read()

Reads the contents of the view and presents them as a dictionary.

Returns

A dict of widget_name: widget_read_value where the values are retrieved using the Widget.read().

fill(value)

Implementation of form filling.

This method goes through all widgets defined on this view one by one and calls their fill methods appropriately.

None values will be ignored.

It will log any skipped fill items. It will log a warning if you pass any extra values for filling.

It will store the fill value in last_fill_data. The data will be “deflattened” to ensure uniformity.

Parameters

values – A dictionary of widget_name: value_to_fill.

Returns

bool if the fill changed any value.

size
storage_domain
preallocate_disk
wipe_disk_after_delete
disk_interface
class airgun.views.computeresource.ComputeResourceVMwareProfileNetworkItem(parent, locator, logger=None)

VMware Compute Resource Profile “Network interface” item widget

nic_type
network
class airgun.views.computeresource.ComputeResourceVMwareProfileControllerVolumeItem(parent, locator, logger=None)

VMware Compute Resource Profile “Storage Controller Volume” item widget

storage_pod
data_store
disk_mode
size
thin_provision
eager_zero
remove_button
class airgun.views.computeresource.ComputeResourceVMwareProfileControllerVolumeList(parent, logger=None, **kwargs)

VMware Compute Resource Profile SCSI Controller Volumes List

ROOT = .
ITEMS = .//div[@class='disk-container']
ITEM_WIDGET_CLASS
add_item_button
class airgun.views.computeresource.ComputeResourceVMwareProfileStorageItem(parent, locator, logger=None)

VMware Compute Resource Profile Storage Controller item widget

controller
remove_button
disks
class airgun.views.computeresource.ResourceProviderProfileView(parent, logger=None, **kwargs)

Base view for Satellite pages

class LibvirtResourceForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class network_interfaces(parent, logger=None, **kwargs)

A host for widgets list. Items that can be added or removed, mainly used in profile for network interfaces, storage and job template.

Usage:

@View.nested
class resources(RemovableWidgetsItemsListView):
    ROOT = "//fieldset[@id='storage_volumes']"
    ITEMS = "./div/div[contains(@class, 'removable-item')]"
    ITEM_WIDGET_CLASS = ComputeResourceRHVProfileStorageItem
ROOT = //fieldset[@id='network_interfaces']
ITEM_WIDGET_CLASS
class storage(parent, logger=None, **kwargs)

A host for widgets list. Items that can be added or removed, mainly used in profile for network interfaces, storage and job template.

Usage:

@View.nested
class resources(RemovableWidgetsItemsListView):
    ROOT = "//fieldset[@id='storage_volumes']"
    ITEMS = "./div/div[contains(@class, 'removable-item')]"
    ITEM_WIDGET_CLASS = ComputeResourceRHVProfileStorageItem
ROOT = //fieldset[@id='storage_volumes']
ITEMS = ./div/div[contains(@class, 'removable-item')]
ITEM_WIDGET_CLASS
cpus
cpu_mode
memory
image
class EC2ResourceForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

flavor
image
availability_zone
subnet
security_groups
managed_ip
class GCEResourceForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

machine_type
image
network
external_ip
default_disk_size
class RHVResourceForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class network_interfaces(parent, logger=None, **kwargs)

A host for widgets list. Items that can be added or removed, mainly used in profile for network interfaces, storage and job template.

Usage:

@View.nested
class resources(RemovableWidgetsItemsListView):
    ROOT = "//fieldset[@id='storage_volumes']"
    ITEMS = "./div/div[contains(@class, 'removable-item')]"
    ITEM_WIDGET_CLASS = ComputeResourceRHVProfileStorageItem
ROOT = //fieldset[@id='network_interfaces']
ITEM_WIDGET_CLASS
class storage(parent, logger=None, **kwargs)

A host for widgets list. Items that can be added or removed, mainly used in profile for network interfaces, storage and job template.

Usage:

@View.nested
class resources(RemovableWidgetsItemsListView):
    ROOT = "//fieldset[@id='storage_volumes']"
    ITEMS = "./div/div[contains(@class, 'removable-item')]"
    ITEM_WIDGET_CLASS = ComputeResourceRHVProfileStorageItem
ROOT = //fieldset[@id='storage_volumes']
ITEMS = ./div/div[contains(@class, 'removable-item')]
ITEM_WIDGET_CLASS
cluster
template
instance_type
cores
sockets
memory
highly_available
class VMwareResourceForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class network_interfaces(parent, logger=None, **kwargs)

A host for widgets list. Items that can be added or removed, mainly used in profile for network interfaces, storage and job template.

Usage:

@View.nested
class resources(RemovableWidgetsItemsListView):
    ROOT = "//fieldset[@id='storage_volumes']"
    ITEMS = "./div/div[contains(@class, 'removable-item')]"
    ITEM_WIDGET_CLASS = ComputeResourceRHVProfileStorageItem
ROOT = //fieldset[@id='network_interfaces']
ITEM_WIDGET_CLASS
class storage(parent, logger=None, **kwargs)

A host for widgets list. Items that can be added or removed, mainly used in profile for network interfaces, storage and job template.

Usage:

@View.nested
class resources(RemovableWidgetsItemsListView):
    ROOT = "//fieldset[@id='storage_volumes']"
    ITEMS = "./div/div[contains(@class, 'removable-item')]"
    ITEM_WIDGET_CLASS = ComputeResourceRHVProfileStorageItem
ROOT = //div[contains(concat(' ', @class, ' '), ' vmware-storage-container ')]
ITEMS = //div[contains(concat(' ', @class, ' '), ' controller-container ')]
ITEM_WIDGET_CLASS
add_item_button
cpus
cores_per_socket
memory
firmware
cluster
resource_pool
folder
guest_os
virtual_hw_version
memory_hot_add
cpu_hot_add
cdrom_drive
annotation_notes
image
breadcrumb
compute_profile
compute_resource
provider_content
submit
property current_provider

Retrieve the provider name from the compute resource name.

Note: The provider name is always appended to the end of the compute resource name, for example: compute resource name “foo”

  1. For RHV provider, the compute resource name will be displayed as: “foo (RHV)”

  2. For EC2 provider, the compute resource name will be displayed as:

    “foo (ca-central-1-EC2)” where “ca-central-1” is the region.

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.computeresource.ResourceProviderVMImport(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.computeresource.ComputeResourceGenericImageCreateView(parent, logger=None, **kwargs)

A Generic Compute Resource Image create view.

breadcrumb
name
operating_system
architecture
username
user_data
password
image
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.computeresource.ComputeResourceGenericImageEditViewMixin

A Generic Mixin Resource Image edit view.

property is_displayed
class airgun.views.computeresource.ComputeResourceRHVImageCreateView(parent, logger=None, **kwargs)

RHV Compute resource Image create view.

class airgun.views.computeresource.ComputeResourceRHVImageEditView(parent, logger=None, **kwargs)

RHV Compute resource Image edit view.

class airgun.views.computeresource.ComputeResourceVMwareImageCreateView(parent, logger=None, **kwargs)

VMWare ComputeResource Image create View

class airgun.views.computeresource.ComputeResourceVMwareImageEditView(parent, logger=None, **kwargs)

VMWare ComputeResource Image edit View

airgun.views.configgroup
Module Contents
Classes

ConfigGroupsView

Base view for Satellite pages

ConfigGroupCreateView

Base view for Satellite pages

ConfigGroupEditView

Base view for Satellite pages

class airgun.views.configgroup.ConfigGroupsView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.configgroup.ConfigGroupCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
name
submit
classes
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.configgroup.ConfigGroupEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.containerimagetag
Module Contents
Classes

ContainerImageTagsView

Base view for Satellite pages

ContainerImageTagDetailsView

Common view for task details screen. Can be found for most of tasks for

class airgun.views.containerimagetag.ContainerImageTagsView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.containerimagetag.ContainerImageTagDetailsView(parent, logger=None, **kwargs)

Common view for task details screen. Can be found for most of tasks for various entities like Products, Repositories, Errata etc.

class details(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

product
repository
class lce(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Lifecycle Environments
table
breadcrumb
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.contentcredential
Module Contents
Classes

ContentCredentialsTableView

Base view for Satellite pages

ContentCredentialCreateView

Base view for Satellite pages

ContentCredentialEditView

Base view for Satellite pages

class airgun.views.contentcredential.ContentCredentialsTableView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.contentcredential.ContentCredentialCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
name
content_type
content
upload_file
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.contentcredential.ContentCredentialEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

class details(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

name
content_type
content
products
repos
class products(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

table
class repositories(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

table
breadcrumb
remove
dialog
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.contenthost
Module Contents
Classes

StatusIcon

Small icon indicating subscription or katello-agent status. Can be

InstallableUpdatesCellView

Installable Updates Table Cell View for content host view Table

ContentHostsView

Base view for Satellite pages

ContentHostDetailsView

Base view for Satellite pages

ContentHostTaskDetailsView

Common view for task details screen. Can be found for most of tasks for

SyspurposeBulkActionView

Base view for Satellite pages

ErrataDetailsView

Base view for Satellite pages

class airgun.views.contenthost.StatusIcon(parent, locator=None, logger=None)

Small icon indicating subscription or katello-agent status. Can be colored in either green, yellow or red.

Example html representation:

<span
 ng-class="table.getHostStatusIcon(host.subscription_global_status)"
 class="red host-status pficon pficon-error-circle-o status-error">
</span>

Locator example:

//span[contains(@ng-class, 'host.subscription_global_status')]
//i[contains(@ng-class, 'host.subscription_global_status')]
property color

Returns string representing icon color: ‘red’, ‘yellow’, ‘green’ or ‘unknown’.

read()

Returns current icon color

class airgun.views.contenthost.InstallableUpdatesCellView(parent, logger=None, **kwargs)

Installable Updates Table Cell View for content host view Table

class errata(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = ./a[contains(@ui-sref, 'errata')]
security
bug_fix
enhancement
ROOT = .
class airgun.views.contenthost.ContentHostsView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
export
register
actions
dialog
select_all
table
pagination
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.contenthost.ContentHostDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

class details(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

name
uuid
bios_uuid
description
type
katello_agent
virtual_guests
registered_through
subscription_status
details
auto_attach
system_purpose_status
service_level
usage_type
role
addons
os
architecture
number_of_cpus
sockets
cores_per_socket
ram
virtual_guest
security
bug_fix
enhancement
release_version
content_view
lce
registered
registered_by
last_checkin
class provisioning_details(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Provisioning Details
name
status
operating_system
puppet_environment
last_puppet_report
model
host_group
class subscriptions(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

SUB_ITEM = Subscriptions
status
auto_attach
run_auto_attach
service_level
resources
class host_collections(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Host Collections
resources
class packages_actions(parent, logger=None, **kwargs)

Regular primary level Tab with dropdown.

Usage:

@View.nested
class mytab(SatTabWithDropdown):
    TAB_NAME = 'My Tab'
    SUB_ITEM = 'My Tab Dropdown Item'
TAB_NAME = Packages
SUB_ITEM = Actions
action_type
name
perform
update_all_packages
class packages_installed(parent, logger=None, **kwargs)

Regular primary level Tab with dropdown.

Usage:

@View.nested
class mytab(SatTabWithDropdown):
    TAB_NAME = 'My Tab'
    SUB_ITEM = 'My Tab Dropdown Item'
TAB_NAME = Packages
SUB_ITEM = Installed
remove_selected
table
class packages_applicable(parent, logger=None, **kwargs)

Regular primary level Tab with dropdown.

Usage:

@View.nested
class mytab(SatTabWithDropdown):
    TAB_NAME = 'My Tab'
    SUB_ITEM = 'My Tab Dropdown Item'
TAB_NAME = Packages
SUB_ITEM = Applicable
upgrade_selected
update_all_packages
table
class errata(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

lce_filter
searchbox
apply_selected
recalculate
table
select_all
pagination
search(query, lce=None)

Apply available filters before proceeding with searching and automatically set proper search mask if errata id instead of errata title was passed.

Parameters
  • query (str) – search query to type into search field. Both errata id (RHEA-2012:0055) and errata title (Sea_Erratum) are supported.

  • lce (str optional) – filter by lifecycle environment

Returns

list of dicts representing table rows

Return type

list

class module_streams(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Module Streams
status_filter
table
search(query, status='All')

Searches for Module Streams. Apply available filters before proceeding with searching. By default ‘All’ is passed

Parameters
  • query (str) – search query to type into search field.

  • status (str optional) – filter by status of module stream on host

Returns

list of dicts representing table rows

Return type

list

class repository_sets(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Repository Sets
show_all
limit_to_lce
actions
table
read()

Sometimes no checkboxes are checked off by default, selecting “Show All” in such case.

breadcrumb
unregister
dialog
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.contenthost.ContentHostTaskDetailsView(parent, logger=None, **kwargs)

Common view for task details screen. Can be found for most of tasks for various entities like Products, Repositories, Errata etc.

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.contenthost.SyspurposeBulkActionView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
service_level
role
usage_type
assign
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.contenthost.ErrataDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
advisory
type
title
issued
updated
description
last_updated_on
reboot_suggested
packages
module_streams
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.contentview
Module Contents
Classes

ContentViewTableView

Base view for Satellite pages

ContentViewCreateView

Base view for Satellite pages

ContentViewCopyView

Base view for Satellite pages

ContentViewRemoveView

Base view for Satellite pages

ContentViewEditView

Base view for Satellite pages

ContentViewVersionPublishView

Base view for Satellite pages

EntitySearchView

Secondary level Tab, typically 'List/Remove' or 'Add' sub-tab inside

ContentViewVersionDetailsView

Base view for Satellite pages

ContentViewVersionPromoteView

Base view for Satellite pages

ContentViewVersionRemoveView

Base view for Satellite pages

ContentViewVersionRemoveConfirmationView

Base view for Satellite pages

class airgun.views.contentview.ContentViewTableView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.contentview.ContentViewCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
name
label
description
composite_view
solve_dependencies
auto_publish
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.contentview.ContentViewCopyView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
new_name
create
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.contentview.ContentViewRemoveView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
conflicts
table
remove
cancel
property conflicts_present
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.contentview.ContentViewEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

class details(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

name
label
description
composite
solve_dependencies
class versions(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

searchbox
table
search(version_name)

Searches for content view version.

Searchbox can’t search by version name, only by id, that’s why in case version name was passed, it’s transformed into recognizable value before filling, for example:

'Version 1.0' -> 'version = 1'
class content_views(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Content Views
resources
class repositories(parent, logger=None, **kwargs)

Regular primary level Tab with dropdown.

Usage:

@View.nested
class mytab(SatTabWithDropdown):
    TAB_NAME = 'My Tab'
    SUB_ITEM = 'My Tab Dropdown Item'
TAB_NAME = Yum Content
SUB_ITEM = Repositories
resources
class filters(parent, logger=None, **kwargs)

Regular primary level Tab with dropdown.

Usage:

@View.nested
class mytab(SatTabWithDropdown):
    TAB_NAME = 'My Tab'
    SUB_ITEM = 'My Tab Dropdown Item'
TAB_NAME = Yum Content
SUB_ITEM = Filters
new_filter
remove_selected
table
class docker_repositories(parent, logger=None, **kwargs)

Regular primary level Tab with dropdown.

Usage:

@View.nested
class mytab(SatTabWithDropdown):
    TAB_NAME = 'My Tab'
    SUB_ITEM = 'My Tab Dropdown Item'
TAB_NAME = Container Images
SUB_ITEM = Repositories
resources
class ostree_content(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = OSTree Content
resources
breadcrumb
publish
actions
dialog
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.contentview.ContentViewVersionPublishView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
version
description
force_metadata_regeneration
save
cancel
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.contentview.EntitySearchView(parent, logger=None, **kwargs)

Secondary level Tab, typically ‘List/Remove’ or ‘Add’ sub-tab inside some primary tab.

Usage:

@View.nested
class listremove(SatSecondaryTab):
    TAB_NAME = 'List/Remove'
repo_filter
searchbox
table
search(query, repo=None)

Apply available filters before proceeding with searching.

Parameters
  • query (str) – search query to type into search field.

  • repo (str optional) – filter by repository name

Returns

list of dicts representing table rows

Return type

list

class airgun.views.contentview.ContentViewVersionDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

class yum_repositories(parent, logger=None, **kwargs)

Secondary level Tab, typically ‘List/Remove’ or ‘Add’ sub-tab inside some primary tab.

Usage:

@View.nested
class listremove(SatSecondaryTab):
    TAB_NAME = 'List/Remove'
TAB_NAME = Yum Repositories
table
class docker_repositories(parent, logger=None, **kwargs)

Secondary level Tab, typically ‘List/Remove’ or ‘Add’ sub-tab inside some primary tab.

Usage:

@View.nested
class listremove(SatSecondaryTab):
    TAB_NAME = 'List/Remove'
TAB_NAME = Docker Repositories
table
class rpm_packages(parent, logger=None, **kwargs)

Secondary level Tab, typically ‘List/Remove’ or ‘Add’ sub-tab inside some primary tab.

Usage:

@View.nested
class listremove(SatSecondaryTab):
    TAB_NAME = 'List/Remove'
TAB_NAME = rpm Packages
class module_streams(parent, logger=None, **kwargs)

Secondary level Tab, typically ‘List/Remove’ or ‘Add’ sub-tab inside some primary tab.

Usage:

@View.nested
class listremove(SatSecondaryTab):
    TAB_NAME = 'List/Remove'
TAB_NAME = Module Streams
class errata(parent, logger=None, **kwargs)

Secondary level Tab, typically ‘List/Remove’ or ‘Add’ sub-tab inside some primary tab.

Usage:

@View.nested
class listremove(SatSecondaryTab):
    TAB_NAME = 'List/Remove'
table
class details(parent, logger=None, **kwargs)

Secondary level Tab, typically ‘List/Remove’ or ‘Add’ sub-tab inside some primary tab.

Usage:

@View.nested
class listremove(SatSecondaryTab):
    TAB_NAME = 'List/Remove'
description
environments
breadcrumb
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.contentview.ContentViewVersionPromoteView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
lce
description
force_metadata_regeneration
promote
cancel
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.contentview.ContentViewVersionRemoveView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
table
completely
next
cancel
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.contentview.ContentViewVersionRemoveConfirmationView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
cancel
back
confirm_remove
message_title
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.contentview_new
Module Contents
Classes

NewContentViewTableView

Base view for Satellite pages

NewContentViewCreateView

Base view for Satellite pages

class airgun.views.contentview_new.NewContentViewTableView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
create_content_view
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.contentview_new.NewContentViewCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

class component(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

component_tile
solve_dependencies
import_only
child_widget_accessed(widget)

This hook is called when a child widget of current view is accessed.

One of useful examples is below. it allows us to switch between frames.

Parameters

widget – The widget being accessed or ParametrizedViewRequest.

class composite(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

composite_tile
auto_publish
child_widget_accessed(widget)

This hook is called when a child widget of current view is accessed.

One of useful examples is below. it allows us to switch between frames.

Parameters

widget – The widget being accessed or ParametrizedViewRequest.

title
name
label
description
submit
cancel
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

after_fill(value)

Ensure ‘Create content view’ button is enabled after filling out the required fields

airgun.views.contentviewfilter
Module Contents
Classes

CVFRuleActions

'Actions' column for content view filter rules. Can contain either

CVFRuleVersion

'Version' column for content view filter rule. Depending on type (e.g.

CVFEditableEntry

Content view filter variant of Editable Entry, main difference of which

AffectedRepositoriesTab

Affected repositories tab contains repositories count inside tab title,

ContentViewFiltersView

Base view for Satellite pages

CreateYumFilterView

Base view for Satellite pages

EditYumFilterView

Base view for Satellite pages

Attributes

ACTIONS_COLUMN

airgun.views.contentviewfilter.ACTIONS_COLUMN = 4
class airgun.views.contentviewfilter.CVFRuleActions(parent, logger=None, **kwargs)

‘Actions’ column for content view filter rules. Can contain either ‘Edit’ button or ‘Save’ and ‘Cancel’.

edit
save
cancel
class airgun.views.contentviewfilter.CVFRuleVersion(parent, logger=None, **kwargs)

‘Version’ column for content view filter rule. Depending on type (e.g. ‘Equal To’, ‘Greater Than’ etc) can have different set of inputs.

class all_versions(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class equal_to(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

version
class greater_than(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

min_version
class less_than(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

max_version
class range(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

min_version
max_version
rule_type
rule
version_text
fill(values)

Custom fill to support passing values for all inputs in single tuple without the need to specify specific input name.

Parameters

values (tuple) – tuple containing values for specific version type and its inputs, e.g. (‘Equal To’, ‘0.5’) or (‘Range’, ‘4.1’, ‘4.6’)

read()

Custom read to return “summary” text value, not the dict with every included widget separately.

class airgun.views.contentviewfilter.CVFEditableEntry(parent, locator=None, name=None, logger=None)

Content view filter variant of Editable Entry, main difference of which is span tags instead of dd and dt.

class airgun.views.contentviewfilter.AffectedRepositoriesTab(parent, logger=None, **kwargs)

Affected repositories tab contains repositories count inside tab title, making it impossible to rely on exact string value. Using starts-with instead.

TAB_NAME = Affected Repositories
TAB_LOCATOR
class airgun.views.contentviewfilter.ContentViewFiltersView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
new_filter
remove_selected
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.contentviewfilter.CreateYumFilterView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
name
content_type
inclusion_type
description
save
cancel
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.contentviewfilter.EditYumFilterView(parent, logger=None, **kwargs)

Base view for Satellite pages

class details(parent, logger=None, **kwargs)

Secondary level Tab, typically ‘List/Remove’ or ‘Add’ sub-tab inside some primary tab.

Usage:

@View.nested
class listremove(SatSecondaryTab):
    TAB_NAME = 'List/Remove'
name
description
class rpm_filter(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class rpms(parent, logger=None, **kwargs)

Secondary level Tab, typically ‘List/Remove’ or ‘Add’ sub-tab inside some primary tab.

Usage:

@View.nested
class listremove(SatSecondaryTab):
    TAB_NAME = 'List/Remove'
TAB_NAME = RPMs
exclude_no_errata
add_rule
remove_rule
table
class errata_filter(parent, logger=None, **kwargs)

Combines both ‘Errata by ID’ and ‘Errata by date and type’ filters as they can’t be easily distinguished on UI. For ‘Errata by ID’ filter ‘Add’ and ‘List/Remove’ tabs are available, for ‘Errata by date and type’ - only ‘Erratum Date Range’ tab is displayed.

class add_tab(parent, logger=None, **kwargs)

Secondary level Tab, typically ‘List/Remove’ or ‘Add’ sub-tab inside some primary tab.

Usage:

@View.nested
class listremove(SatSecondaryTab):
    TAB_NAME = 'List/Remove'
security
enhancement
bugfix
date_type
start_date
end_date
select_all
search(query=None, filters=None)

Custom search which supports all errata filters.

Parameters
  • query (str optional) – search query to type into search box. Optional as sometimes filtering is enough to find desired errata

  • filters (dict optional) – dictionary containing widget names and values to set (like with regular fill())

add(errata_id=None, filters=None)

Add specific errata to filter or all available if id not provided.

Parameters
  • errata_id (str optional) – ID of errata to add. If not provided - all available errata in table will be selected (especially useful together with filtering)

  • filters (dict optional) – dictionary containing widget names and values to set (like with regular fill())

fill(errata_id=None, filters=None)

Associate resource(s)

class erratum_date_range(parent, logger=None, **kwargs)

Secondary level Tab, typically ‘List/Remove’ or ‘Add’ sub-tab inside some primary tab.

Usage:

@View.nested
class listremove(SatSecondaryTab):
    TAB_NAME = 'List/Remove'
TAB_NAME = Erratum Date Range
security
enhancement
bugfix
date_type
start_date
end_date
save
cancel
after_fill(was_change)

A hook invoked after all the widgets were filled.

If it returns None, the was_changed in fill() does not change. If it returns a boolean, that boolean will be returned as was_changed.

Parameters

was_changebool signalizing whether the fill() changed anything,

add(errata_id=None, filters=None)
Add specific errata to filter or all available if id not

provided.

Parameters
  • errata_id (str optional) – ID of errata to add. If not provided - all available errata in table will be selected (especially useful together with filtering)

  • filters (dict optional) – dictionary containing widget names and values to set (like with regular fill())

read()

Read values from tabs depending on errata filter type (by id or daterange filter).

class package_group_filter(parent, logger=None, **kwargs)

View which allows assigning/unassigning some resources to entity. Contains two secondary level tabs ‘List/Remove’ and ‘Add’ with tables allowing managing resources for entity.

Usage:

@View.nested
class resources(AddRemoveResourcesView): pass
class module_streams_filter(parent, logger=None, **kwargs)

View which allows assigning/unassigning some resources to entity. Contains two secondary level tabs ‘List/Remove’ and ‘Add’ with tables allowing managing resources for entity.

Usage:

@View.nested
class resources(AddRemoveResourcesView): pass
class affected_repositories(parent, logger=None, **kwargs)

Affected repositories tab contains repositories count inside tab title, making it impossible to rely on exact string value. Using starts-with instead.

filter_toggle
product_filter
searchbox
update_repositories
select_all
table
breadcrumb
filter_type
content_tabs
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.dashboard
Module Contents
Classes

ItemValueList

List of name-value pairs. Each name element from every pair is clickable

TotalCount

Return total hosts count from Host Configuration Status type of

AutoRefresh

Widget refer to auto refresh functionality on dashboard

DashboardView

Base view for Satellite pages

class airgun.views.dashboard.ItemValueList(parent, logger=None, **kwargs)

List of name-value pairs. Each name element from every pair is clickable

Example html representation:

<ul>
    <li>
        <a class="dashboard-links"...>Hosts with no reports</a>
        <h4>5</h4>
    </li>
LABELS = .//li/a[@class='dashboard-links']
LABEL = .//li/a[@class='dashboard-links'][normalize-space(.)='{}']
VALUE = .//h4[preceding-sibling::a[contains(., '{}')]]
read()

Return a dictionary where keys are widget criteria names and values are number of hosts that correspond to these criteria

fill(value)

Click on specific criteria from the widget list

class airgun.views.dashboard.TotalCount(parent, logger=None, **kwargs)

Return total hosts count from Host Configuration Status type of widgets

total_count
read()

Return hosts count from widget. Usually it is a string like ‘Total Hosts: 5’

class airgun.views.dashboard.AutoRefresh(parent, logger=None, **kwargs)

Widget refer to auto refresh functionality on dashboard

AUTO_REFRESH = //a[contains(@href, '/?auto_refresh')]
read()

Return whether functionality is enabled or disabled

fill(value)

Click on a button if state of the widget need to be changed

class airgun.views.dashboard.DashboardView(parent, logger=None, **kwargs)

Base view for Satellite pages

class DiscoveredHosts(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = .//li[@data-name='Discovered Hosts']
hosts
hosts_count
class HostConfigurationStatus(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = .//li[@data-name='Host Configuration Status for All']
status_list
total_count
class TaskStatus(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = .//li[@data-name='Task Status']
states
fill(values)

Implementation of form filling.

This method goes through all widgets defined on this view one by one and calls their fill methods appropriately.

None values will be ignored.

It will log any skipped fill items. It will log a warning if you pass any extra values for filling.

It will store the fill value in last_fill_data. The data will be “deflattened” to ensure uniformity.

Parameters

values – A dictionary of widget_name: value_to_fill.

Returns

bool if the fill changed any value.

class LatestJobs(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = .//li[@data-name='Latest Jobs']
jobs
class HostConfigurationChart(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = .//li[@data-name='Host Configuration Chart for All']
chart
class ContentViews(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = .//li[@data-name='Content Views']
content_views
class SyncOverview(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = .//li[@data-name='Sync Overview']
syncs
class HostSubscription(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = .//li[@data-name='Host Subscription Status']
subscriptions
fill(values)

Implementation of form filling.

This method goes through all widgets defined on this view one by one and calls their fill methods appropriately.

None values will be ignored.

It will log any skipped fill items. It will log a warning if you pass any extra values for filling.

It will store the fill value in last_fill_data. The data will be “deflattened” to ensure uniformity.

Parameters

values – A dictionary of widget_name: value_to_fill.

Returns

bool if the fill changed any value.

class SubscriptionStatus(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = .//li[@data-name='Subscription Status']
subscriptions
class LatestErrata(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = .//li[@data-name='Latest Errata']
erratas
class NewHosts(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = .//li[@data-name='New Hosts']
hosts
class HostCollections(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = .//li[@data-name='Host Collections']
collections
class LatestFailedTasks(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = .//li[@data-name='Latest Warning/Error Tasks']
tasks
fill(values)

Implementation of form filling.

This method goes through all widgets defined on this view one by one and calls their fill methods appropriately.

None values will be ignored.

It will log any skipped fill items. It will log a warning if you pass any extra values for filling.

It will store the fill value in last_fill_data. The data will be “deflattened” to ensure uniformity.

Parameters

values – A dictionary of widget_name: value_to_fill.

Returns

bool if the fill changed any value.

class VirtWhoConfigStatus(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = .//li[@data-name='Virt-who Configs Status']
config_status
latest_config
title
manage
refresh
searchbox
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

search(query)

Return whole dashboard view as a result of a search

Parameters

query (str) – search query to type into search field.

Returns

all view widgets values

Return type

dict

airgun.views.discoveredhosts
Module Contents
Classes

DiscoveredHostsViewTable

Discovered hosts table that has a different no rows message location.

DiscoveredHostsView

Main discovered hosts view

DiscoveredHostDetailsTableColumn

A Table column for Discovered host details Table Row

DiscoveredHostDetailsTableRow

A Table Row for Discovered host details Table

DiscoveredHostDetailsTable

A Table represented by two columns where the property name is the first

DiscoveredHostDetailsView

Discovered Host details view

DiscoveredHostsActionDialog

Common dialog view for all discovered hosts actions

DiscoveredHostsAutoProvisionDialog

Discovered hosts Auto Provision action dialog view

DiscoveredHostsAssignOrganizationDialog

Discovered hosts Assign Organization action dialog view

DiscoveredHostsAssignLocationDialog

Discovered hosts Assign Location action dialog view

DiscoveredHostsRebootDialog

Discovered hosts Reboot dialog action view

DiscoveredHostsDeleteDialog

Discovered hosts Delete dialog action view

DiscoveredHostProvisionDialog

Discovered host Provision action dialog view

DiscoveredHostEditProvisioningView

Discovered Host Edit Provisioning View,

class airgun.views.discoveredhosts.DiscoveredHostsViewTable(parent, locator, column_widgets=None, assoc_column=None, rows_ignore_top=None, rows_ignore_bottom=None, top_ignore_fill=False, bottom_ignore_fill=False, logger=None)

Discovered hosts table that has a different no rows message location.

Example html representation:

<div id="content">
    <table ...>

    </table>
    No entries found
</div>
no_rows_message = //div[@id='content' and contains(., 'No entries found')]
class airgun.views.discoveredhosts.DiscoveredHostsView(parent, logger=None, **kwargs)

Main discovered hosts view

title
actions
table
welcome_message
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

is_searchable()

Verify that search procedure can be executed against discovered hosts page. That means that we have search field present.

Note: When no discovered host exists in the system the search box does not exist in the DOM. Also there is no welcome_message.

class airgun.views.discoveredhosts.DiscoveredHostDetailsTableColumn(parent, position, absolute_position=None, logger=None)

A Table column for Discovered host details Table Row

__locator__()
class airgun.views.discoveredhosts.DiscoveredHostDetailsTableRow(parent, index, logger=None)

A Table Row for Discovered host details Table

Column
class airgun.views.discoveredhosts.DiscoveredHostDetailsTable(parent, locator, column_widgets=None, assoc_column=None, rows_ignore_top=None, rows_ignore_bottom=None, top_ignore_fill=False, bottom_ignore_fill=False, logger=None)

A Table represented by two columns where the property name is the first column and the property value is the second column.

Example html representation:

<table>
    <tbody>
        <tr>
            <th><strong> architecture </strong></th>
            <td>x86_64</td>
        </tr>
        <tr>
            <th><strong> discovery_bootif </strong></th>
            <td>52:d2:5f:73:31:e2</td>
        </tr>
        <tr>
            <th><strong> discovery_bootip</strong></th>
            <td>10.8.212.60</td>
        </tr>
Row
read()

Transform rows to a dict {property_name: property_value …}.

class airgun.views.discoveredhosts.DiscoveredHostDetailsView(parent, logger=None, **kwargs)

Discovered Host details view

breadcrumb
back
actions
delete
expand_all
interfaces
highlights
storage
hardware
network
software
miscellaneous
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.discoveredhosts.DiscoveredHostsActionDialog(parent, logger=None, **kwargs)

Common dialog view for all discovered hosts actions

title
table
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.discoveredhosts.DiscoveredHostsAutoProvisionDialog(parent, logger=None, **kwargs)

Discovered hosts Auto Provision action dialog view

title
class airgun.views.discoveredhosts.DiscoveredHostsAssignOrganizationDialog(parent, logger=None, **kwargs)

Discovered hosts Assign Organization action dialog view

title
organization
class airgun.views.discoveredhosts.DiscoveredHostsAssignLocationDialog(parent, logger=None, **kwargs)

Discovered hosts Assign Location action dialog view

title
location
class airgun.views.discoveredhosts.DiscoveredHostsRebootDialog(parent, logger=None, **kwargs)

Discovered hosts Reboot dialog action view

title
class airgun.views.discoveredhosts.DiscoveredHostsDeleteDialog(parent, logger=None, **kwargs)

Discovered hosts Delete dialog action view

title
class airgun.views.discoveredhosts.DiscoveredHostProvisionDialog(parent, logger=None, **kwargs)

Discovered host Provision action dialog view

ROOT = .//div[@class='modal-content']
title
host_group
organization
location
cancel
customize_create
quick_create
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

property is_all_displayed

Check that all the required dialog widgets fields are displayed

before_fill(values=None)

Before filling we have to wait and ensure that all the required dialog widgets fields are visible.

class airgun.views.discoveredhosts.DiscoveredHostEditProvisioningView(parent, logger=None, **kwargs)

Discovered Host Edit Provisioning View,

Note: When we click on customize_create in dialog

DiscoveredHostProvisionDialog, the user is redirect to this view.

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.discoveryrule
Module Contents
Classes

DiscoveryRulesView

Base view for Satellite pages

DiscoveryRuleCreateView

Base view for Satellite pages

DiscoveryRuleEditView

Base view for Satellite pages

class airgun.views.discoveryrule.DiscoveryRulesView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
new_on_blank_page
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.discoveryrule.DiscoveryRuleCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

class primary(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

name
search
host_group
hostname
hosts_limit
priority
enabled
class locations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class organizations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
submit
cancel
breadcrumb
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.discoveryrule.DiscoveryRuleEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.domain
Module Contents
Classes

DomainListView

List of all domains.

DomainCreateView

Base view for Satellite pages

DomainEditView

Base view for Satellite pages

class airgun.views.domain.DomainListView(parent, logger=None, **kwargs)

List of all domains.

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.domain.DomainCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

class domain(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

dns_domain
full_name
dns_capsule
class parameters(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

params
class locations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

multiselect
class organizations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

multiselect
breadcrumb
submit_button
cancel_button
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.domain.DomainEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.errata
Module Contents
Classes

ErratumView

Base view for Satellite pages

ErrataDetailsView

Base view for Satellite pages

ApplyErrataView

Base view for Satellite pages

ErrataInstallationConfirmationView

Base view for Satellite pages

ErrataTaskDetailsView

Common view for task details screen. Can be found for most of tasks for

class airgun.views.errata.ErratumView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
table
repo_filter
applicable_filter
installable_filter
apply_errata
searchbox
search(query, applicable=True, installable=False, repo=None)

Apply available filters before proceeding with searching and automatically set proper search mask if errata id instead of errata title was passed.

Parameters
  • query (str) – search query to type into search field. Both errata id (RHEA-2012:0055) and errata title (Sea_Erratum) are supported.

  • applicable (bool) – filter by only applicable errata

  • installable (bool) – filter by only installable errata

  • repo (str optional) – filter by repository name

Returns

list of dicts representing table rows

Return type

list

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.errata.ErrataDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

class details(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

advisory
cves
type
severity
issued
last_updated_on
reboot_suggested
topic
description
solution
class content_hosts(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Content Hosts
environment_filter
searchbox
apply
table
search(query, environment=None)

Apply environment filter before proceeding with searching.

Parameters
  • query (str) – search query to type into search field.

  • environment (str optional) – filter by environment name

Returns

list of dicts representing table rows

Return type

list

class repositories(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

lce_filter
cv_filter
searchbox
table
search(query, lce=None, cv=None)

Apply available filters before proceeding with searching.

Parameters
  • query (str) – search query to type into search field.

  • lce (str optional) – filter by lifecycle environment name

  • cv (str optional) – filter by content view name

Returns

list of dicts representing table rows

Return type

list

class packages(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

independent_packages
module_stream_packages
breadcrumb
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.errata.ApplyErrataView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
environment_filter
searchbox
next_button
table
search(query, environment=None)

Apply environment filter before proceeding with searching.

Parameters
  • query (str) – search query to type into search field.

  • environment (str optional) – filter by environment name

Returns

list of dicts representing table rows

Return type

list

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.errata.ErrataInstallationConfirmationView(parent, logger=None, **kwargs)

Base view for Satellite pages

cancel
confirm
class airgun.views.errata.ErrataTaskDetailsView(parent, logger=None, **kwargs)

Common view for task details screen. Can be found for most of tasks for various entities like Products, Repositories, Errata etc.

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.filter
Module Contents
Classes

FiltersView

Base view for Satellite pages

FilterDetailsView

Base view for Satellite pages

FilterCreateView

Base view for Satellite pages

class airgun.views.filter.FiltersView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
searchbox
new
table
pagination
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

search(query)
class airgun.views.filter.FilterDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

class Taxonomies(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class locations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class organizations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class NoTaxonomies(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

breadcrumb
resource_type
permission
override
unlimited
filter
submit
taxonomies_tabs
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.filter.FilterCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.hardware_model
Module Contents
Classes

DeleteHardwareModelDialog

Usual confirmation dialog with two buttons and close 'x' button in the

HardwareModelsView

Base view for Satellite pages

HardwareModelCreateView

Base view for Satellite pages

HardwareModelEditView

Base view for Satellite pages

class airgun.views.hardware_model.DeleteHardwareModelDialog(parent, logger=None, **kwargs)

Usual confirmation dialog with two buttons and close ‘x’ button in the right corner. Has nothing in common with javascript alert, confirm or prompt pop-ups.

Example html representation:

<div class="modal-content">
    <button type="button" class="close" ... ng-click="cancel()">
    <div class="modal-footer ng-scope">
        <button class="btn btn-danger" ng-click="ok()">
        <button class="btn ..." ng-click="cancel()"...>

Locator example:

//div[@class='modal-content']
confirm_dialog
cancel_dialog
class airgun.views.hardware_model.HardwareModelsView(parent, logger=None, **kwargs)

Base view for Satellite pages

delete_dialog
title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.hardware_model.HardwareModelCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
name
hardware_model
vendor_class
info
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.hardware_model.HardwareModelEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.host
Module Contents
Classes

TableActions

Interface table has Action column that contains only two buttons,

PuppetClassParameterValue

Represent value field for Puppet Class parameters table row from Host

ComputeResourceLibvirtProfileStorageItem

Libvirt Compute Resource profile "Storage" item widget

ComputeResourceGoogleProfileStorageItem

Google Compute Resource profile "Storage" item widget

HostInterface

View is a kind of abstract widget that can hold another widgets. Remembers the order,

HostsView

Base view for Satellite pages

HostCreateView

Base view for Satellite pages

HostRegisterView

Base view for Satellite pages

RecommendationWidget

The widget representation of recommendation item.

RecommendationListView

Insights tab view of a host

HostDetailsView

Base view for Satellite pages

HostEditView

Base view for Satellite pages

HostsActionCommonDialog

Common base class Dialog for Hosts Actions

HostsChangeGroup

Common base class Dialog for Hosts Actions

HostsChangeEnvironment

Common base class Dialog for Hosts Actions

HostsTaxonomyMismatchRadioGroup

Handle Taxonomy Mismatch Radio Group

HostsAssignOrganization

Common base class Dialog for Hosts Actions

HostsAssignLocation

Common base class Dialog for Hosts Actions

HostsAssignCompliancePolicy

Common base class Dialog for Hosts Actions

HostsUnassignCompliancePolicy

Common base class Dialog for Hosts Actions

HostsChangeOpenscapCapsule

Common base class Dialog for Hosts Actions

HostsDeleteActionDialog

Common base class Dialog for Hosts Actions

HostsDeleteTaskDetailsView

Hosts Delete Task Details View

HostsJobInvocationCreateView

Hosts Job Invocation Create View

HostsJobInvocationStatusView

Hosts Job Invocation Status View

class airgun.views.host.TableActions(parent, logger=None, **kwargs)

Interface table has Action column that contains only two buttons, without any extra controls, so we cannot re-use any existing widgets

edit
delete
class airgun.views.host.PuppetClassParameterValue(parent, logger=None, **kwargs)

Represent value field for Puppet Class parameters table row from Host Parameters tab. That field can be interacted with as usual text input, but also it can be overridden with new value

ROOT = .//div[@class='input-group']
value
override_button
remove_override_button
hide_button
property hidden

Return whether the variable is hidden

property overridden

Return whether the variable is overridden, a variable is overridden if not disabled

property hidden_value
read()

Return smart variable widget values

fill(value)

Set smart variable widget values

hide(value=True)

Hide or unhide the smart variable input box

override(value=True)

Click corresponding button depends on action needed

class airgun.views.host.ComputeResourceLibvirtProfileStorageItem(parent, locator, logger=None)

Libvirt Compute Resource profile “Storage” item widget

storage_pool
size
storage_type
class airgun.views.host.ComputeResourceGoogleProfileStorageItem(parent, locator, logger=None)

Google Compute Resource profile “Storage” item widget

size
class airgun.views.host.HostInterface(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class InterfaceForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class VirtualAttributesForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

tag
attached_to
virtual_nic
virtual_attributes
class BMCForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

username
password
provider
class BondForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

mode
attached_devices
bond_options
class BridgeForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

attached_devices
ROOT = .//div[@id='interfaceModal']
title
submit
interface_type
mac
device_identifier
dns
domain
subnet
subnet_v6
ip
ipv6
managed
primary
provision
remote_execution
interface_additional_data
network_type
network
nic_type
after_fill(was_change)

Submit the dialog data once all necessary view widgets filled

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.host.HostsView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
export
new
register
select_all
table
host_status = //span[contains(@class, 'host-status')]
actions
dialog
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.host.HostCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

class host(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

name
organization
location
hostgroup
inherit_deploy_option
deploy
compute_profile
lce
content_view
content_source
reset_puppet_environment
inherit_puppet_environment
puppet_environment
puppet_master
puppet_ca
openscap_capsule
class ansible_roles(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Ansible Roles
resources
class NoResourceForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class LibvirtResourceForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class virtual_machine(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

class storage(parent, logger=None, **kwargs)

A host for widgets list. Items that can be added or removed, mainly used in profile for network interfaces, storage and job template.

Usage:

@View.nested
class resources(RemovableWidgetsItemsListView):
    ROOT = "//fieldset[@id='storage_volumes']"
    ITEMS = "./div/div[contains(@class, 'removable-item')]"
    ITEM_WIDGET_CLASS = ComputeResourceRHVProfileStorageItem
ROOT = //fieldset[@id='storage_volumes']
ITEMS = ./div/div[contains(@class, 'removable-item')]
ITEM_WIDGET_CLASS
TAB_NAME = Virtual Machine
cpus
cpu_mode
memory
startup
class GoogleResourceForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class virtual_machine(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

class storage(parent, logger=None, **kwargs)

A host for widgets list. Items that can be added or removed, mainly used in profile for network interfaces, storage and job template.

Usage:

@View.nested
class resources(RemovableWidgetsItemsListView):
    ROOT = "//fieldset[@id='storage_volumes']"
    ITEMS = "./div/div[contains(@class, 'removable-item')]"
    ITEM_WIDGET_CLASS = ComputeResourceRHVProfileStorageItem
ROOT = //fieldset[@id='storage_volumes']
ITEMS = ./div/div[contains(@class, 'removable-item')]
ITEM_WIDGET_CLASS
TAB_NAME = Virtual Machine
machine_type
network
external_ip
class AzureRmResourceForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class virtual_machine(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Virtual Machine
resource_group
vm_size
platform
username
password
ssh_key
premium_os_disk
os_disk_caching
custom_script_command
file_uris
class operating_system(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Operating System
architecture
operating_system
image
root_password
class operating_system(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Operating System
architecture
operating_system
build
image
media_type
media
ptable
disk
root_password
class interfaces(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

interface
interfaces_list
add_new_interface
before_fill(values=None)

If we don’t want to break view.fill() procedure flow, we need to push ‘Edit’ button to open necessary dialog to be able to fill values

class puppet_enc(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Puppet ENC
config_groups
classes
puppet_class_parameters
class parameters(parent, logger=None, **kwargs)

Host parameters tab

class global_params(parent, **kwargs)

Satellite version of table.

Includes a paginator sub-widget. If found, then the paginator is used to read all entries from the table.

If the table is empty, there might be only one column with an appropriate message in the table body, or it may have no columns or rows at all. This subclass handles both possibilities.

Example html representation:

<table bst-table="table" ...>
   <thead>
     <tr class="ng-scope">
       <th class="row-select"><input type="checkbox" ...></th>
       <th ng-click="table.sortBy(column)" ...>
        <span ...><span ...>Column Name</span></span><i ...></i></th>
       <th ng-click="table.sortBy(column)" ...>
        <span ...><span ...>Column Name</span></span><i ...></i></th>
     </tr>
   </thead>
   <tbody>
    <tr id="noRowsTr"><td colspan="9">
         <span data-block="no-rows-message" ...>
            <span class="ng-scope">Table is empty</span></span>
    </td></tr>
   </tbody>
 </table>

Locator example:

.//table
read()

Return a list of dictionaries. Each dictionary consists of global parameter name, value and whether overridden or not.

override(name)

Override a single global parameter.

Parameters

name (str) – The name of the global parameter to override.

fill(names)

Override global parameter entries.

Parameters

names (list[str]) – global parameters names to override.

host_params
fill(values)

Fill the parameters tab widgets with values.

Parameters

values – A dictionary of widget_name: value_to_fill.

Note

The global_params value can be a list of names of global parameters to override or a list of dicts like [{name: global_param_name_to_override, value: new_value}…]

class additional_information(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Additional Information
owned_by
enabled
hardware_model
comment
breadcrumb
submit
provider_content
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

property current_provider

Retrieve the provider name from the compute resource name.

Note: The provider name is always appended to the end of the compute resource name, for example: compute resource name “foo”

  1. For RHV provider, the compute resource name will be displayed as: “foo (RHV)”

  2. For Libvirt provider, the compute resource name will be displayed as: “foo (Libvirt)”

Return “Compute resource is not specified” value in case no compute resource specified in deployment procedure (e.g. “Bare Metal”)

class airgun.views.host.HostRegisterView(parent, logger=None, **kwargs)

Base view for Satellite pages

class general(parent, logger=None, **kwargs)

Represents the Patternfly Tab widget.

Selects itself automatically when any child widget gets accessed, ensuring that the widget is visible.

https://www.patternfly.org/v4/documentation/react/components/tabs

TAB_NAME = General
TAB_LOCATOR
ROOT = //section[@id="generalSection"]
orgnization
location
host_group
operating_system
capsule
insecure
class advanced(parent, logger=None, **kwargs)

Represents the Patternfly Tab widget.

Selects itself automatically when any child widget gets accessed, ensuring that the widget is visible.

https://www.patternfly.org/v4/documentation/react/components/tabs

TAB_NAME = Advanced
TAB_LOCATOR
ROOT = //section[@id="advancedSection"]
setup_rex
setup_insights
install_packages
update_packages
repository
repository_gpg_key_url
token_life_time
rex_interface
activation_keys
life_cycle_env
ignore_error
force
activation_key_helper
life_cycle_env_helper
install_packages_helper
generate_command
cancel
registration_command
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

before_fill(values)

Fill some of the parameters in the widgets with values.

Parameters

values – A dictionary of widget_name: value_to_fill.

Note

Some of the fields are disabled for few seconds and get enabled based on the selection, handled separately

class airgun.views.host.RecommendationWidget(parent, locator, logger=None)

The widget representation of recommendation item.

EXPAND_BUTTON = .//div[contains(@class, 'expand')]
NAME = .//div/p[contains(@class, 'item-heading')]
RISK_LABEL = .//div/span[contains(@class, 'risk-label')]
TEXT = .//div[contains(@class, 'list-group-item-container')]
property expand_button

Return the expand button element.

property expanded

Check whether this recommendation is expanded or not.

expand()

Expand the recommendation item section.

property name

Return the name displayed for this recommendation item

property label

Return the risk label displayed for this recommendation item

property text

Return the text displayed for this recommendation item

read()

Each object should implement read so it is easy to get the value of such object.

When you implement this method, the exact return value is up to you but it MUST be consistent with what fill() takes.

class airgun.views.host.RecommendationListView(parent, logger=None, **kwargs)

Insights tab view of a host

ROOT = //div[contains(@id, 'host_details_insights_tab')]
ITEMS = .//div[@id='hits_list']/div[contains(@class, 'list-group-item')]
ITEM_WIDGET
items()
read()

Reads the contents of the view and presents them as a dictionary.

Returns

A dict of widget_name: widget_read_value where the values are retrieved using the Widget.read().

class airgun.views.host.HostDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

class properties(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

properties_table
class insights(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

insights_tab
breadcrumb
boot_disk
schedule_remote_job
back
webconsole
edit
clone
build
delete
audits_details
facts_details
yaml_dump
yaml_output
content_details
recommendations
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.host.HostEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
submit
toggle_manage
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.host.HostsActionCommonDialog(parent, logger=None, **kwargs)

Common base class Dialog for Hosts Actions

title
table
keep_selected
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.host.HostsChangeGroup(parent, logger=None, **kwargs)

Common base class Dialog for Hosts Actions

title
host_group
class airgun.views.host.HostsChangeEnvironment(parent, logger=None, **kwargs)

Common base class Dialog for Hosts Actions

title
environment
class airgun.views.host.HostsTaxonomyMismatchRadioGroup(parent, **kwargs)

Handle Taxonomy Mismatch Radio Group

Example html representation:

<form ...>
    <div class="clearfix">
        ...
    </div>
    <input type="radio" id="location_optimistic_import_yes" ..>
     Fix Location on Mismatch
    <input type="radio" id="location_optimistic_import_no" ..>
     Fail on Mismatch
</form>
taxonomy
fix_mismatch
fail_on_mismatch
buttons_text
_is_checked(widget)

Returns whether the widget is checked

read()

Return the text of the selected button

fill(value)

Select the button with text equal to value

property is_displayed

Shortcut allowing you to detect if the widget is displayed.

If the logic behind is_displayed is more complex, you can always override this.

Returns

bool

class airgun.views.host.HostsAssignOrganization(parent, logger=None, **kwargs)

Common base class Dialog for Hosts Actions

title
organization
on_mismatch
class airgun.views.host.HostsAssignLocation(parent, logger=None, **kwargs)

Common base class Dialog for Hosts Actions

title
location
on_mismatch
class airgun.views.host.HostsAssignCompliancePolicy(parent, logger=None, **kwargs)

Common base class Dialog for Hosts Actions

title
policy
class airgun.views.host.HostsUnassignCompliancePolicy(parent, logger=None, **kwargs)

Common base class Dialog for Hosts Actions

title
policy
class airgun.views.host.HostsChangeOpenscapCapsule(parent, logger=None, **kwargs)

Common base class Dialog for Hosts Actions

title
policy
class airgun.views.host.HostsDeleteActionDialog(parent, logger=None, **kwargs)

Common base class Dialog for Hosts Actions

title
class airgun.views.host.HostsDeleteTaskDetailsView(parent, logger=None, **kwargs)

Hosts Delete Task Details View

class airgun.views.host.HostsJobInvocationCreateView(parent, logger=None, **kwargs)

Hosts Job Invocation Create View

class airgun.views.host.HostsJobInvocationStatusView(parent, logger=None, **kwargs)

Hosts Job Invocation Status View

airgun.views.host_new
Module Contents
Classes

Card

Each card in host view has it's own title with same locator

DropdownWithDescripton

Dropdown with description below items

HostDetailsCard

Details card body contains multiple host detail information

NewHostDetailsView

Base view for Satellite pages

InstallPackagesView

Install packages modal

ModuleStreamDialog

PF4 confirmation dialog with two buttons and close 'x' button in the

class airgun.views.host_new.Card(parent, logger=None, **kwargs)

Each card in host view has it’s own title with same locator

title
class airgun.views.host_new.DropdownWithDescripton(parent, text=None, locator=None, logger=None)

Dropdown with description below items

ITEM_LOCATOR = .//*[contains(@class, 'pf-c-dropdown__menu-item') and contains(text(), {})]
class airgun.views.host_new.HostDetailsCard(parent, logger=None, **kwargs)

Details card body contains multiple host detail information

LABELS = //div[@class="pf-c-description-list__group"]//dt//span
VALUES = //div[@class="pf-c-description-list__group"]//dd//descendant::*/text()/..
read()

Return a dictionary where keys are property names and values are property values. Values are either in span elements or in div elements

class airgun.views.host_new.NewHostDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

class overview(parent, logger=None, **kwargs)

Represents the Patternfly Tab widget.

Selects itself automatically when any child widget gets accessed, ensuring that the widget is visible.

https://www.patternfly.org/v4/documentation/react/components/tabs

class details(parent, logger=None, **kwargs)

Each card in host view has it’s own title with same locator

ROOT = .//article[.//div[text()="Details"]]
details
class host_status(parent, logger=None, **kwargs)

Each card in host view has it’s own title with same locator

ROOT = .//article[.//span[text()="Host status"]]
status
status_success
status_warning
status_error
status_disabled
class recent_audits(parent, logger=None, **kwargs)

Each card in host view has it’s own title with same locator

ROOT = .//article[.//div[text()="Recent audits"]]
all_audits
table
class installable_errata(parent, logger=None, **kwargs)

Each card in host view has it’s own title with same locator

ROOT = .//article[.//div[text()="Installable errata"]]
security_advisory
bug_fixes
enhancements
class total_risks(parent, logger=None, **kwargs)

Each card in host view has it’s own title with same locator

ROOT = .//article[.//div[text()="Total risks"]]
low
moderate
important
critical
class recent_jobs(parent, logger=None, **kwargs)

Each card in host view has it’s own title with same locator

class finished(parent, logger=None, **kwargs)

Represents the Patternfly Tab widget.

Selects itself automatically when any child widget gets accessed, ensuring that the widget is visible.

https://www.patternfly.org/v4/documentation/react/components/tabs

table
class running(parent, logger=None, **kwargs)

Represents the Patternfly Tab widget.

Selects itself automatically when any child widget gets accessed, ensuring that the widget is visible.

https://www.patternfly.org/v4/documentation/react/components/tabs

table
class scheduled(parent, logger=None, **kwargs)

Represents the Patternfly Tab widget.

Selects itself automatically when any child widget gets accessed, ensuring that the widget is visible.

https://www.patternfly.org/v4/documentation/react/components/tabs

table
ROOT = .//article[.//div[text()="Recent jobs"]]
actions
ROOT = .//div[contains(@class, "host-details-tab-item")]
class content(parent, logger=None, **kwargs)

Represents the Patternfly Tab widget.

Selects itself automatically when any child widget gets accessed, ensuring that the widget is visible.

https://www.patternfly.org/v4/documentation/react/components/tabs

class packages(parent, logger=None, **kwargs)

Represents the Patternfly Tab widget.

Selects itself automatically when any child widget gets accessed, ensuring that the widget is visible.

https://www.patternfly.org/v4/documentation/react/components/tabs

ROOT = .//div[@id="packages-tab"]
select_all
searchbar
status_filter
upgrade
dropdown
table
pagination
class errata(parent, logger=None, **kwargs)

Represents the Patternfly Tab widget.

Selects itself automatically when any child widget gets accessed, ensuring that the widget is visible.

https://www.patternfly.org/v4/documentation/react/components/tabs

ROOT = .//div[@id="errata-tab"]
select_all
searchbar
type_filter
severity_filter
apply
dropdown
table
pagination
class module_streams(parent, logger=None, **kwargs)

Represents the Patternfly Tab widget.

Selects itself automatically when any child widget gets accessed, ensuring that the widget is visible.

https://www.patternfly.org/v4/documentation/react/components/tabs

TAB_NAME = Module streams
ROOT = .//div[@id="modulestreams-tab"]
searchbar
status_filter
installation_status_filter
dropdown
table
pagination
class repository_sets(parent, logger=None, **kwargs)

Represents the Patternfly Tab widget.

Selects itself automatically when any child widget gets accessed, ensuring that the widget is visible.

https://www.patternfly.org/v4/documentation/react/components/tabs

TAB_NAME = Repository sets
ROOT = .//div[@id="repo-sets-tab"]
select_all
searchbar
status_filter
dropdown
table
pagination
ROOT = .//div
class traces(parent, logger=None, **kwargs)

Represents the Patternfly Tab widget.

Selects itself automatically when any child widget gets accessed, ensuring that the widget is visible.

https://www.patternfly.org/v4/documentation/react/components/tabs

enable_traces
class ansible(parent, logger=None, **kwargs)

Represents the Patternfly Tab widget.

Selects itself automatically when any child widget gets accessed, ensuring that the widget is visible.

https://www.patternfly.org/v4/documentation/react/components/tabs

class insights(parent, logger=None, **kwargs)

Represents the Patternfly Tab widget.

Selects itself automatically when any child widget gets accessed, ensuring that the widget is visible.

https://www.patternfly.org/v4/documentation/react/components/tabs

breadcrumb
edit
dropdown
schedule_job
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.host_new.InstallPackagesView(parent, logger=None, **kwargs)

Install packages modal

ROOT = .//div[@id="package-install-modal"]
select_all
searchbar
table
pagination
install
cancel
class airgun.views.host_new.ModuleStreamDialog(parent, logger=None, **kwargs)

PF4 confirmation dialog with two buttons and close ‘x’ button in the right corner.

confirm_dialog
cancel_dialog
airgun.views.hostcollection
Module Contents
Classes

HostCollectionsView

Base view for Satellite pages

HostCollectionCreateView

Base view for Satellite pages

HostCollectionEditView

Base view for Satellite pages

HostCollectionPackageContentRadioGroup

Handle an HTML non normalized Radio group according to the current

HostCollectionManagePackagesView

Base view for Satellite pages

HostCollectionInstallErrataView

Base view for Satellite pages

HostCollectionManageModuleStreamsView

Base view for Satellite pages

HostCollectionChangeAssignedContentView

Base view for Satellite pages

HostCollectionActionTaskDetailsView

Common view for task details screen. Can be found for most of tasks for

HostCollectionActionRemoteExecutionJobCreate

Base view for Satellite pages

class airgun.views.hostcollection.HostCollectionsView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.hostcollection.HostCollectionCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
name
unlimited_hosts
max_hosts
description
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.hostcollection.HostCollectionEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

class details(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

name
description
content_hosts
content_host_limit
manage_packages
install_errata
manage_module_streams
change_assigned_content
class hosts(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Hosts
resources
breadcrumb
actions
dialog
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.hostcollection.HostCollectionPackageContentRadioGroup(parent, locator, logger=None)

Handle an HTML non normalized Radio group according to the current architecture.

Note: This is a temporary solution, a fix will be issued upstream,

when the fix will be available downstream we should replace the implementation with RadioGroup.

Example html representation:

<div>
    <input type="radio" id="package" ...>
    <label>Package</label>
    <input type="radio" id="package_group" ...>
    <label>Package Group</label>
buttons_name_id_map
get_input_by_name(name)
property selected

Return the name of the button that is currently selected.

select(name)

Select specific radio button in the group

class airgun.views.hostcollection.HostCollectionManagePackagesView(parent, logger=None, **kwargs)

Base view for Satellite pages

class dialog(parent, logger=None, **kwargs)

Usual confirmation dialog with two buttons and close ‘x’ button in the right corner. Has nothing in common with javascript alert, confirm or prompt pop-ups.

Example html representation:

<div class="modal-content">
    <button type="button" class="close" ... ng-click="cancel()">
    <div class="modal-footer ng-scope">
        <button class="btn btn-danger" ng-click="ok()">
        <button class="btn ..." ng-click="cancel()"...>

Locator example:

//div[@class='modal-content']
ROOT = .//div[@class='inline-confirmation']
confirm_dialog
cancel_dialog
title
update_all
content_type
packages
install
update
remove
done
property is_displayed

The view is displayed when it’s title exists

get_action_button(name)

Return an action button by it’s name

apply_action(name, action_via='via Katello Agent')

Apply an action by name using action via if indicated

class airgun.views.hostcollection.HostCollectionInstallErrataView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
search
refresh
search_url
install
table
dialog
property is_displayed

The view is displayed when it’s title exists

class airgun.views.hostcollection.HostCollectionManageModuleStreamsView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
table
property is_displayed

The view is displayed when it’s title exists

class airgun.views.hostcollection.HostCollectionChangeAssignedContentView(parent, logger=None, **kwargs)

Base view for Satellite pages

class dialog(parent, logger=None, **kwargs)

Usual confirmation dialog with two buttons and close ‘x’ button in the right corner. Has nothing in common with javascript alert, confirm or prompt pop-ups.

Example html representation:

<div class="modal-content">
    <button type="button" class="close" ... ng-click="cancel()">
    <div class="modal-footer ng-scope">
        <button class="btn btn-danger" ng-click="ok()">
        <button class="btn ..." ng-click="cancel()"...>

Locator example:

//div[@class='modal-content']
ROOT = .//div[@ng-show='showConfirm']
confirm_dialog
cancel_dialog
title
lce
content_view
assign
property is_displayed

The view is displayed when it’s title exists

class airgun.views.hostcollection.HostCollectionActionTaskDetailsView(parent, logger=None, **kwargs)

Common view for task details screen. Can be found for most of tasks for various entities like Products, Repositories, Errata etc.

title
breadcrumb
property is_displayed

The view is displayed when it’s title exists

class airgun.views.hostcollection.HostCollectionActionRemoteExecutionJobCreate(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.hostgroup
Module Contents
Classes

ActivationKeyDropDown

List of actions, expandable via button with caret. Usually comes with

HostGroupsView

Base view for Satellite pages

HostGroupCreateView

Base view for Satellite pages

HostGroupEditView

Base view for Satellite pages

class airgun.views.hostgroup.ActivationKeyDropDown(parent, locator, logger=None)

List of actions, expandable via button with caret. Usually comes with button attached on left side, representing either most common action or hint like ‘Select Action’.

Example html representation:

<div class="btn-group dropdown" is-open="status.isOpen">
  <button type="button" class="btn btn-default" ...>
    <span><span >Select Action</span></span>
  </button>
  <button type="button" class="btn btn-default" ...>
    <span class="caret"></span>
  </button>
  <ul class="dropdown-menu dropdown-menu-right ng-scope" role="menu">
    <li role="menuitem"><a><span><span>Action1</span></span></a></li>
    <li role="menuitem"><a><span><span>Action2</span></span></a></li>
  </ul>
</div>

Locator example:

//div[contains(@class, 'dropdown')]
//div[contains(@class, 'btn-group')]
dropdown
property items

Returns a list of all dropdown items as strings.

class airgun.views.hostgroup.HostGroupsView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
new_on_blank_page
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.hostgroup.HostGroupCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

class host_group(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Host Group
parent_name
name
description
lce
content_view
content_source
puppet_environment
deploy
puppet_master
puppet_ca
openscap_capsule
class ansible_roles(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Ansible Roles
resources
class puppet_enc(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Puppet ENC
config_groups
classes
class network(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

domain
ipv4_subnet
ipv6_subnet
realm
class operating_system(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

class TypeMedium(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

media
class TypeSynced(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

synced_content
TAB_NAME = Operating System
architecture
operating_system
media_type
media_content
ptable
root_password
class parameters(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

class locations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class organizations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class activation_keys(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Activation Keys
activation_keys
breadcrumb
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.hostgroup.HostGroupEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.http_proxy
Module Contents
Classes

HTTPProxyView

Base view for Satellite pages

HTTPProxyCreateView

Base view for Satellite pages

HTTPProxyEditView

Base view for Satellite pages

class airgun.views.http_proxy.HTTPProxyView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.http_proxy.HTTPProxyCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

class http_proxy(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = HTTP Proxy
name
url
username
disable_pass
password
test_url
test_connection
class locations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class organizations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
breadcrumb
submit
cancel
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.http_proxy.HTTPProxyEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.job_invocation
Module Contents
Classes

JobInvocationsView

Base view for Satellite pages

JobInvocationCreateView

Base view for Satellite pages

JobInvocationStatusView

Base view for Satellite pages

class airgun.views.job_invocation.JobInvocationsView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.job_invocation.JobInvocationCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

class RunSSHCommandForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

command
class RestartHostForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

action
class RunPuppetForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

puppet_options
class RunModuleForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

action
module_spec
puppet_options
class advanced_options(parent, logger=None)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class DescriptionTemplateForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

description_template
expander
effective_user
description
use_default
description_content
timeout
password
passphrase
sudo_password
concurrency_level
time_span
execution_order
class ExecuteNowForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class FutureExecutionForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

start_at
start_before
class RecurringExecutionForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class CronlineForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

cron_line
class RepeatMonthlyForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

at_days
at_hours
at_minutes
class RepeatWeeklyForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

on_mon
on_tue
on_wed
on_thu
on_fri
on_sat
on_sun
at_hours
at_minutes
class RepeatDailyForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

at_hours
at_minutes
class RepeatHourlyForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

at_minutes
class NoEndsDateForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class EndsDateEnabledForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

at_year
at_month
at_day
at_hours
at_minutes
repeats
repeats_content
repeat_n_times
ends
ends_date_content
breadcrumb
job_category
job_template
bookmark
search_query
template_content
query_type
schedule
schedule_content
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.job_invocation.JobInvocationStatusView(parent, logger=None, **kwargs)

Base view for Satellite pages

class overview(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

job_status
job_status_progress
execution_order
hosts_table
total_hosts
breadcrumb
rerun
rerun_failed
job_task
cancel_job
abort_job
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

wait_for_result(timeout=600, delay=1)

Wait for invocation job to finish

airgun.views.job_template
Module Contents
Classes

JobTemplatesView

Base view for Satellite pages

JobTemplateForeignInputSetItem

Job Template Foreign Input Set Item widget

JobTemplateCreateView

Base view for Satellite pages

JobTemplateEditView

Base view for Satellite pages

class airgun.views.job_template.JobTemplatesView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
import_template
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.job_template.JobTemplateForeignInputSetItem(parent, locator, logger=None)

Job Template Foreign Input Set Item widget

remove_button
target_template
include_all
include
exclude
class airgun.views.job_template.JobTemplateCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

class template(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

name
default
template_editor
description
audit
class inputs(parent, logger=None, **kwargs)

A host for widgets list. Items that can be added or removed, mainly used in profile for network interfaces, storage and job template.

Usage:

@View.nested
class resources(RemovableWidgetsItemsListView):
    ROOT = "//fieldset[@id='storage_volumes']"
    ITEMS = "./div/div[contains(@class, 'removable-item')]"
    ITEM_WIDGET_CLASS = ComputeResourceRHVProfileStorageItem
ITEMS = .//div[contains(@class, 'template_inputs')]/following-sibling::div
ITEM_WIDGET_CLASS
add_item_button
class job(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

class foreign_input_sets(parent, logger=None, **kwargs)

A host for widgets list. Items that can be added or removed, mainly used in profile for network interfaces, storage and job template.

Usage:

@View.nested
class resources(RemovableWidgetsItemsListView):
    ROOT = "//fieldset[@id='storage_volumes']"
    ITEMS = "./div/div[contains(@class, 'removable-item')]"
    ITEM_WIDGET_CLASS = ComputeResourceRHVProfileStorageItem
ROOT = //div[div[contains(@class, 'foreign_input_sets')]]
ITEMS = .//div[contains(@class, 'foreign_input_sets')]/following-sibling::div
ITEM_WIDGET_CLASS
add_item_button
job_category
description_format
provider_type
timeout
value
current_user
overridable
class type(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

snippet
class locations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class organizations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
breadcrumb
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.job_template.JobTemplateEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.ldapauthentication
Module Contents
Classes

LDAPAuthenticationsView

Base view for Satellite pages

LDAPAuthenticationCreateView

Base view for Satellite pages

LDAPAuthenticationEditView

Base view for Satellite pages

class airgun.views.ldapauthentication.LDAPAuthenticationsView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
internal
external
ldap
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.ldapauthentication.LDAPAuthenticationCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

class ldap_server(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = LDAP server
name
host
text_connection
ldaps
port
server_type
class account(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

account_name
password
base_dn
groups_base_dn
use_netgroups
ldap_filter
onthefly_register
usergroup_sync
class attribute_mappings(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Attribute mappings
login
first_name
last_name
mail
photo
class locations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class organizations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
breadcrumb
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.ldapauthentication.LDAPAuthenticationEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.lifecycleenvironment
Module Contents
Classes

LCEView

Base view for Satellite pages

LCECreateView

Base view for Satellite pages

LCEEditView

Base view for Satellite pages

class airgun.views.lifecycleenvironment.LCEView(parent, logger=None, **kwargs)

Base view for Satellite pages

class lce(parent, logger=None, **kwargs)

Parametrized view for the lifecycle environement, takes an LCE name on instantiation

ROOT
PARAMETERS = ['lce_name']
LAST_ENV = //div[@ng-repeat='path in paths']//table//th[last()]
current_env
envs_table
new_child
classmethod all(browser)

Helper method which returns list of tuples with all available LCE names (last available environment is used as a name). It’s required for read() to work properly.

read()

Returns content views and count hosts count per each available lifecycle environment We get dictionary in next format:

{
    'LCE_1': {'Content Views': 0, 'Content Hosts': 1},
    'LCE_2': {'Content Views': 1, 'Content Hosts': 2},
}
title
new_path
edit_parent_env
parent_env_cvs_count
parent_env_products_count
parent_env_products_errata
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.lifecycleenvironment.LCECreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
name
label
description
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.lifecycleenvironment.LCEEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

class details(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

name
label
description
unauthenticated_pull
registry_name_pattern
class content_views(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Content Views
resources
class packages(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

cv_filter
repo_filter
searchbox
table
search(query, cv=None, repo=None)

Apply available filters before proceeding with searching.

Parameters
  • query (str) – search query to type into search field.

  • cv (str optional) – filter by content view name

  • repo (str optional) – filter by repository name

Returns

list of dicts representing table rows

Return type

list

class module_streams(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Module Streams
cv_filter
repo_filter
searchbox
table
search(query, cv=None, repo=None)

Apply available filters before proceeding with searching.

Parameters
  • query (str) – search query to type into search field.

  • cv (str optional) – filter by content view name

  • repo (str optional) – filter by repository name

Returns

list of dicts representing table rows

Return type

list

breadcrumb
remove
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.location
Module Contents
Classes

LocationsView

Base view for Satellite pages

LocationCreateView

Base view for Satellite pages

LocationsEditView

Base view for Satellite pages

class airgun.views.location.LocationsView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.location.LocationCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
parent_location
name
description
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.location.LocationsEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

class primary(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
parent_location
name
description
class users(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
all_users
resources
class capsules(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
all_capsules
resources
class subnets(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
all_subnets
resources
class compute_resources(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
TAB_NAME = Compute Resources
all_resources
resources
class media(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
all_medias
resources
class provisioning_templates(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
TAB_NAME = Provisioning Templates
all_templates
resources
class partition_tables(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
TAB_NAME = Partition Tables
all_ptables
resources
class domains(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
all_domains
resources
class realms(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
all_realms
resources
class environments(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
all_environments
resources
class host_groups(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
TAB_NAME = Host Groups
all_hostgroups
resources
class organizations(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
resources
class parameters(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
resources
breadcrumb
submit
cancel
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.login
Module Contents
Classes

LoginView

View is a kind of abstract widget that can hold another widgets. Remembers the order,

class airgun.views.login.LoginView(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

username
password
login_text
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.media
Module Contents
Classes

MediumView

Base view for Satellite pages

MediaCreateView

Base view for Satellite pages

MediaEditView

Base view for Satellite pages

class airgun.views.media.MediumView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.media.MediaCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

class medium(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

name
path
os_family
class locations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class organizations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
breadcrumb
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.media.MediaEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.modulestream
Module Contents
Classes

CustomSearch

Searchbar for table filtering

ModuleStreamView

Main Module_Streams view

ModuleStreamsDetailsView

Base view for Satellite pages

class airgun.views.modulestream.CustomSearch(parent, logger=None, **kwargs)

Searchbar for table filtering

search_field
search_button
class airgun.views.modulestream.ModuleStreamView(parent, logger=None, **kwargs)

Main Module_Streams view

title
table
search_box
search(query)

Perform search using search box on the page and return table contents.

Parameters

query (str) – search query to type into search field. E.g. name = "bar".

Returns

list of dicts representing table rows

Return type

list

property is_displayed

The view is displayed when it’s title exists

class airgun.views.modulestream.ModuleStreamsDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

class details(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

details_table
class repositories(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

table
breadcrumb
title
details_tab
property is_displayed

Assume the view is displayed when its breadcrumb is visible

airgun.views.organization
Module Contents
Classes

OrganizationsView

Base view for Satellite pages

OrganizationCreateView

Base view for Satellite pages

OrganizationCreateSelectHostsView

Base view for Satellite pages

OrganizationEditView

Base view for Satellite pages

class airgun.views.organization.OrganizationsView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.organization.OrganizationCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
name
label
description
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.organization.OrganizationCreateSelectHostsView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
assign_all
assign_manually
proceed
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.organization.OrganizationEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

class primary(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
name
label
default_system_sla
description
class users(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
all_users
resources
class capsules(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
all_capsules
resources
class subnets(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
all_subnets
resources
class compute_resources(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
TAB_NAME = Compute Resources
all_resources
resources
class media(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
all_medias
resources
class provisioning_templates(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
TAB_NAME = Provisioning Templates
all_templates
resources
class partition_tables(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
TAB_NAME = Partition Tables
all_ptables
resources
class domains(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
all_domains
resources
class realms(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
all_realms
resources
class environments(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
all_environments
resources
class host_groups(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
TAB_NAME = Host Groups
all_hostgroups
resources
class locations(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
resources
class parameters(parent, logger=None, **kwargs)

Represent vertical tabs that usually used in location and organization entities

Usage:

@View.nested
class mytab(SatVerticalTab):
    TAB_NAME = 'My Tab'
resources
breadcrumb
submit
cancel
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.os
Module Contents
Classes

TemplatesList

List of templates for specific operating system. It can have dynamic

OperatingSystemsView

Base view for Satellite pages

OperatingSystemEditView

Base view for Satellite pages

OperatingSystemCreateView

Base view for Satellite pages

class airgun.views.os.TemplatesList(parent, logger=None, **kwargs)

List of templates for specific operating system. It can have dynamic number of templates per different OS types

Example html representation:

<label ... for="provisioning_template_id">PXELinux template *</label>
<div...>
    <div class="..." id="s2id_operatingsystem_os_default_templates...">
        <a>
            <span>Kickstart default PXELinux</span>
...
<label ... for="provisioning_template_id">PXEGrub template *</label>
<div...>
    <div class="..." id="s2id_operatingsystem_os_default_templates...">
         <a>
             <span>Kickstart default PXEGrub2</span>
SELECT = //label[@for='provisioning_template_id'][contains(.,'{}')]/following-sibling::div/div[contains(@i...
TITLES = //label[@for='provisioning_template_id']
property selects

Get dictionary of currently assigned templates for OS

read()

Return dictionary of strings representing title-value pairs for all templates assigned to specific operating system

fill(value)

Assign provided value for specific operating system template

Parameters

value – dictionary with title-value pairs of templates to be changed for OS (e.g. {‘Provisioning template’: ‘test_template’})

class airgun.views.os.OperatingSystemsView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.os.OperatingSystemEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

class operating_system(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Operating System
name
major
minor
description
family
password_hash
architectures
class partition_table(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Partition Table
resources
class installation_media(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Installation Media
resources
class templates(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class parameters(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Parameters
os_params
breadcrumb
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.os.OperatingSystemCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.oscapcontent
Module Contents
Classes

SCAPContentsView

Base view for Satellite pages

SCAPContentCreateView

Base view for Satellite pages

SCAPContentEditView

Base view for Satellite pages

class airgun.views.oscapcontent.SCAPContentsView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.oscapcontent.SCAPContentCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

class file_upload(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = File Upload
title
scap_file
class locations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class organizations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
create_form
submit
cancel
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.oscapcontent.SCAPContentEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

class file_upload(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = File Upload
title
uploaded_scap_file
scap_file
scap_file_name
breadcrumb
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.oscappolicy
Module Contents
Classes

SCAPPoliciesView

Base view for Satellite pages

ScapPolicyRadioGroup

Handle an HTML non normalized Radio group according to the current

SCAPPolicyCreateView

Base view for Satellite pages

SCAPPolicyEditView

Base view for Satellite pages

SCAPPolicyDetailsView

Base view for Satellite pages

class airgun.views.oscappolicy.SCAPPoliciesView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.oscappolicy.ScapPolicyRadioGroup(parent, locator, logger=None)

Handle an HTML non normalized Radio group according to the current architecture.

Note: This is a temporary solution, a fix will be issued upstream,

when the fix will be available downstream we should replace the implementation with RadioGroup.

Example html representation:

<div>
<input type="radio" value="ansible" name="policy[deploy_by]" id="policy_deploy_by_ansible">
property button_names

Return all radio group labels

_get_parent_label(name)

Get radio group label for specific button

class airgun.views.oscappolicy.SCAPPolicyCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

class deployment_options(parent, logger=None, **kwargs)

Base view for Satellite pages

TAB_NAME = Deployment Options
next_step
deploy_by
after_fill(was_change)

A hook invoked after all the widgets were filled.

If it returns None, the was_changed in fill() does not change. If it returns a boolean, that boolean will be returned as was_changed.

Parameters

was_changebool signalizing whether the fill() changed anything,

class policy_attributes(parent, logger=None, **kwargs)

Base view for Satellite pages

TAB_NAME = Policy Attributes
next_step
name
description
after_fill(was_change)

A hook invoked after all the widgets were filled.

If it returns None, the was_changed in fill() does not change. If it returns a boolean, that boolean will be returned as was_changed.

Parameters

was_changebool signalizing whether the fill() changed anything,

class scap_content(parent, logger=None, **kwargs)

Base view for Satellite pages

TAB_NAME = SCAP Content
next_step
scap_content_resource
xccdf_profile
tailoring_file
xccdf_profile_tailoring_file
after_fill(was_change)

A hook invoked after all the widgets were filled.

If it returns None, the was_changed in fill() does not change. If it returns a boolean, that boolean will be returned as was_changed.

Parameters

was_changebool signalizing whether the fill() changed anything,

class schedule(parent, logger=None, **kwargs)

Base view for Satellite pages

class WeeklyPeriodForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

weekday
class MonthlyPeriodForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

day_of_month
class CustomPeriodForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

cron_line
next_step
period
period_selection
after_fill(was_change)

A hook invoked after all the widgets were filled.

If it returns None, the was_changed in fill() does not change. If it returns a boolean, that boolean will be returned as was_changed.

Parameters

was_changebool signalizing whether the fill() changed anything,

class locations(parent, logger=None, **kwargs)

Base view for Satellite pages

next_step
resources
after_fill(was_change)

A hook invoked after all the widgets were filled.

If it returns None, the was_changed in fill() does not change. If it returns a boolean, that boolean will be returned as was_changed.

Parameters

was_changebool signalizing whether the fill() changed anything,

class organizations(parent, logger=None, **kwargs)

Base view for Satellite pages

next_step
resources
after_fill(was_change)

A hook invoked after all the widgets were filled.

If it returns None, the was_changed in fill() does not change. If it returns a boolean, that boolean will be returned as was_changed.

Parameters

was_changebool signalizing whether the fill() changed anything,

class host_group(parent, logger=None, **kwargs)

Base view for Satellite pages

TAB_NAME = Host Groups
submit
resources
breadcrumb
fill(values)

overrides fill method, to be able to click next button during the creation process even, if no location or organization was selected, by adding the SCAP policy to Default Location or Organization.

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.oscappolicy.SCAPPolicyEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

class deployment_options(parent, logger=None, **kwargs)

Base view for Satellite pages

next_step
deploy_by
class general(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

name
description
class scap_content(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = SCAP Content
scap_content
xccdf_profile
tailoring_file
xccdf_profile_tailoring_file
class schedule(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

class WeeklyPeriodForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

weekday
class MonthlyPeriodForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

day_of_month
class CustomPeriodForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

cron_line
period
period_selection
class locations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class organizations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class host_group(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Host Groups
resources
submit
cancel
breadcrumb
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.oscappolicy.SCAPPolicyDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

class HostsBreakdownStatus(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = .//li[@data-name='Status table']
status_list
total_count
class HostBreakdownChart(parent, logger=None, **kwargs)

Refer to information from the middle of the chart in Oscap Policy Details View

hosts_breakdown
title
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.oscaptailoringfile
Module Contents
Classes

SCAPTailoringFilesView

Base view for Satellite pages

SCAPTailoringFileCreateView

Base view for Satellite pages

SCAPTailoringFileEditView

Base view for Satellite pages

class airgun.views.oscaptailoringfile.SCAPTailoringFilesView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.oscaptailoringfile.SCAPTailoringFileCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

class file_upload(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = File Upload
name
scap_file
class locations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class organizations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
breadcrumb
submit
cancel
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.oscaptailoringfile.SCAPTailoringFileEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

class file_upload(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = File Upload
name
uploaded_scap_file
scap_file
scap_file_name
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.package
Module Contents
Classes

PackagesView

Main Packages view

PackageDetailsView

Base view for Satellite pages

class airgun.views.package.PackagesView(parent, logger=None, **kwargs)

Main Packages view

title
table
repository
applicable
upgradable
search_box
search(query, repository='All Repositories', applicable=False, upgradable=False)

Perform search using search box on the page and return table contents.

Parameters
  • query (str) – search query to type into search field. E.g. name = "bar".

  • repository (str) – repository name to select when searching for the package.

  • applicable (bool) – To show only applicable packages

  • upgradable (bool) – To show only upgradable packages

Returns

list of dicts representing table rows

Return type

list

property is_displayed

The view is displayed when it’s title exists

class airgun.views.package.PackageDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

class details(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

installed_on
applicable_to
upgradable_for
description
summary
group
license
url
size
filename
checksum
checksum_type
source_rpm
build_host
build_time
class files(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

package_files
breadcrumb
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.partitiontable
Module Contents
Classes

PartitionTablesView

Base view for Satellite pages

PartitionTableEditView

Base view for Satellite pages

PartitionTableCreateView

Base view for Satellite pages

class airgun.views.partitiontable.PartitionTablesView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.partitiontable.PartitionTableEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

class template(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

class SnippetOption(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class OSFamilyOption(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

os_family
name
default
snippet
os_family_selection
template_editor
audit_comment
class inputs(parent, logger=None, **kwargs)

A host for widgets list. Items that can be added or removed, mainly used in profile for network interfaces, storage and job template.

Usage:

@View.nested
class resources(RemovableWidgetsItemsListView):
    ROOT = "//fieldset[@id='storage_volumes']"
    ITEMS = "./div/div[contains(@class, 'removable-item')]"
    ITEM_WIDGET_CLASS = ComputeResourceRHVProfileStorageItem
ITEMS = .//div[contains(@class, 'template_inputs')]/following-sibling::div
ITEM_WIDGET_CLASS
add_item_button
class locations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class organizations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
breadcrumb
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.partitiontable.PartitionTableCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.product
Module Contents
Classes

CreateDiscoveredReposView

View which represent Discovered Repository section in Repository

ProductsTableView

Base view for Satellite pages

ProductCreateView

Base view for Satellite pages

ProductEditView

Base view for Satellite pages

ProductRepoDiscoveryView

Base view for Satellite pages

ProductTaskDetailsView

Common view for task details screen. Can be found for most of tasks for

ProductSyncPlanView

Base view for Satellite pages

ProductManageHttpProxy

Represents Http Proxy Management page for Products.

ProductAdvancedSync

Represents Advanced Sync page for Products.

ProductVerifyContentChecksum

Represents Verify Content Checksum Alert page for Products.

class airgun.views.product.CreateDiscoveredReposView(parent, logger=None, **kwargs)

View which represent Discovered Repository section in Repository Discovery procedure.

searchbox
table
create_action
fill(values)

Select necessary repo/repos to be added to new or existing product

read()

Reads the contents of the view and presents them as a dictionary.

Returns

A dict of widget_name: widget_read_value where the values are retrieved using the Widget.read().

class airgun.views.product.ProductsTableView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
edit
repo_discovery
actions
table
dialog
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.product.ProductCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
name
label
gpg_key
ssl_ca_cert
ssl_client_cert
ssl_client_key
sync_plan
create_sync_plan
description
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.product.ProductEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

class details(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

name
label
gpg_key
ssl_ca_cert
ssl_client_cert
ssl_client_key
description
repos_count
tasks_count
sync_plan
sync_state
class repositories(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

table
breadcrumb
actions
dialog
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.product.ProductRepoDiscoveryView(parent, logger=None, **kwargs)

Base view for Satellite pages

class discovered_repos(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

discover_action
cancel_discovery
repos
before_fill(values=None)

After we filled ‘repository type’ and ‘url’ fields, we need to push ‘Discover’ button to get table populated with values. Using before_fill to not define any method explicitly which need to be called and break view.fill() procedure flow

class create_repo(parent, logger=None, **kwargs)

Represent Create Repository page. Depends whether we like create new product or use existing one we use different sets of fields that need to be filled

class ExistingProductForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

product_name
class NewProductForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

product_name
label
gpg_key
product_type
product_content
serve_via_http
verify_ssl
run_procedure
create_repos_table
wait_repo_created()
breadcrumb
repo_type
url
registry_type
username
password
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.product.ProductTaskDetailsView(parent, logger=None, **kwargs)

Common view for task details screen. Can be found for most of tasks for various entities like Products, Repositories, Errata etc.

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.product.ProductSyncPlanView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.product.ProductManageHttpProxy(parent, logger=None, **kwargs)

Represents Http Proxy Management page for Products.

class ExistingProductForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

http_proxy
title
http_proxy_policy
proxy_policy
update
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.product.ProductAdvancedSync(parent, logger=None, **kwargs)

Represents Advanced Sync page for Products.

title
optimized
complete
task
sync
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.product.ProductVerifyContentChecksum(parent, logger=None, **kwargs)

Represents Verify Content Checksum Alert page for Products.

task_alert
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.provisioning_template
Module Contents
Classes

TemplateHostEnvironmentAssociation

Provisioning Template Foreign Input Set Item widget

ProvisioningTemplatesView

Base view for Satellite pages

ProvisioningTemplateDetailsView

Base view for Satellite pages

ProvisioningTemplateCreateView

Base view for Satellite pages

class airgun.views.provisioning_template.TemplateHostEnvironmentAssociation(parent, locator, logger=None)

Provisioning Template Foreign Input Set Item widget

remove_button
host_group
environment
class airgun.views.provisioning_template.ProvisioningTemplatesView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
build_pxe_default
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.provisioning_template.ProvisioningTemplateDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

class template(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

name
default
template_editor
audit
class inputs(parent, logger=None, **kwargs)

A host for widgets list. Items that can be added or removed, mainly used in profile for network interfaces, storage and job template.

Usage:

@View.nested
class resources(RemovableWidgetsItemsListView):
    ROOT = "//fieldset[@id='storage_volumes']"
    ITEMS = "./div/div[contains(@class, 'removable-item')]"
    ITEM_WIDGET_CLASS = ComputeResourceRHVProfileStorageItem
ITEMS = .//div[contains(@class, 'template_inputs')]/following-sibling::div
ITEM_WIDGET_CLASS
add_item_button
class type(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

snippet
template_type
class association(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

class hg_environment_combination(parent, logger=None, **kwargs)

A host for widgets list. Items that can be added or removed, mainly used in profile for network interfaces, storage and job template.

Usage:

@View.nested
class resources(RemovableWidgetsItemsListView):
    ROOT = "//fieldset[@id='storage_volumes']"
    ITEMS = "./div/div[contains(@class, 'removable-item')]"
    ITEM_WIDGET_CLASS = ComputeResourceRHVProfileStorageItem
ROOT = //div[@id='association']
ITEMS = .//fieldset[@id='template_combination']/div
ITEM_WIDGET_CLASS
add_item_button
applicable_os
class locations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class organizations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
breadcrumb
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.provisioning_template.ProvisioningTemplateCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.puppet_class
Module Contents
Classes

PuppetClassesView

Base view for Satellite pages

PuppetClassDetailsView

Base view for Satellite pages

class airgun.views.puppet_class.PuppetClassesView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
import_environments
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.puppet_class.PuppetClassDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

class puppet_class(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Puppet Class
name
puppet_environment
host_group
class smart_class_parameter(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Smart Class Parameter
filter
environment_filter
parameter_list
parameter
breadcrumb
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.puppet_environment
Module Contents
Classes

PuppetEnvironmentTableView

Basic view after clicking Configure -> Environments.

PuppetEnvironmentImportView

View after clicking Configure -> Environments -> import environments with

PuppetEnvironmentCreateView

Details view of the page with boxes that have to be filled in to

class airgun.views.puppet_environment.PuppetEnvironmentTableView(parent, logger=None, **kwargs)

Basic view after clicking Configure -> Environments. In basic view, there can be seen title Puppet Environments, button Create Puppet Environment (new), button import environments and table with existing Puppet Environments

title
new
import_environments
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.puppet_environment.PuppetEnvironmentImportView(parent, logger=None, **kwargs)

View after clicking Configure -> Environments -> import environments with toggles New, Updated, Obsolete. Button update and cancel

breadcrumb
new
updated
obsolete
update
cancel
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.puppet_environment.PuppetEnvironmentCreateView(parent, logger=None, **kwargs)

Details view of the page with boxes that have to be filled in to create a new puppet environment

class environment(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

name
class locations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class organizations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
breadcrumb
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.redhat_repository
Module Contents
Classes

AvailableRepositoryItem

The widget representation of Available repository item of an Available repository set.

AvailableRepositorySetWidget

The widget representation of Available repository set item.

EnabledRepositoryWidget

The widget representation of Enabled repository item.

RepositorySearchCategory

The category search selector, eg: Available, Enabled or Both.

RepositorySearchTypes

Repository content types dropdown for repository search.

RepositoryCategoryView

The base class view that represent the Available or Enabled Repository

RedHatRepositoriesView

The main Red Hat repositories view.

Functions

_wait_for_spinner(widget)

Wait for any spinner to disappear from widget

airgun.views.redhat_repository._wait_for_spinner(widget)

Wait for any spinner to disappear from widget

class airgun.views.redhat_repository.AvailableRepositoryItem(parent, locator, logger=None)

The widget representation of Available repository item of an Available repository set.

ENABLE_BUTTON = .//button
TEXT = .//span
property text

Return the text representation of this repository eg: architecture + OS version if available.

read()

Read this widget by return it’s text representation.

enable()

Enable this repository.

class airgun.views.redhat_repository.AvailableRepositorySetWidget(parent, locator, logger=None)

The widget representation of Available repository set item.

ITEM
EXPAND_BUTTON = .//div[contains(@class, 'expand')]
NAME = .//div[contains(@class, 'item-heading')]
LABEL = .//div[contains(@class, 'item-text')]
ITEMS = .//div[contains(@class, 'list-item-with-divider')]
property expand_button

Return the expand button element.

property expanded

Check whether this repository set is expanded or not.

expand()

Expand the repository set item section.

property name

Return the name displayed for this repository item

property label

Return the label displayed for this repository item

property items

Return all the items (available repositories) of this repository set.

read_items()

Read all the items (repositories) of this repository set

read()

Return the name and label of this repository.

enable(item)

Enable a repository of this repository set.

Parameters

item (str) – The arch and version (if available) of the repository.

class airgun.views.redhat_repository.EnabledRepositoryWidget(parent, locator, logger=None)

The widget representation of Enabled repository item.

ITEM
DISABLE_BUTTON = .//button
disable()

Disable this repository.

class airgun.views.redhat_repository.RepositorySearchCategory(parent, locator, logger=None)

The category search selector, eg: Available, Enabled or Both.

button
fill(item)

Selects Search Repository Category.

class airgun.views.redhat_repository.RepositorySearchTypes(parent, locator, logger=None)

Repository content types dropdown for repository search.

button
close()

Closes the dropdown list.

property selected_items

Returns a list of all dropdown selected items as strings.

select(items)

Selects Search Repository content types.

Parameters

items – The Repository content types required

fill(items)

Selects Search Repository content types

class airgun.views.redhat_repository.RepositoryCategoryView(parent, logger=None, **kwargs)

The base class view that represent the Available or Enabled Repository

Example html representation:

<div class="enabled-repositories-container">
    <h2>Enabled Repositories</h2>
    <div class="list-group list-view-pf list-view-pf-view">
        <div class="sticky-pagination sticky-pagination-grey">
        <div class="list-group-item list-view-pf-stacked">
            ...
        </div>
    </div>
ITEMS = ./div/div[contains(@class, 'list-group-item')]
ITEM_WIDGET
items(name=None, label=None)
read()

Reads the contents of the view and presents them as a dictionary.

Returns

A dict of widget_name: widget_read_value where the values are retrieved using the Widget.read().

class airgun.views.redhat_repository.RedHatRepositoriesView(parent, logger=None, **kwargs)

The main Red Hat repositories view.

class available(parent, logger=None, **kwargs)

The base class view that represent the Available or Enabled Repository

Example html representation:

<div class="enabled-repositories-container">
    <h2>Enabled Repositories</h2>
    <div class="list-group list-view-pf list-view-pf-view">
        <div class="sticky-pagination sticky-pagination-grey">
        <div class="list-group-item list-view-pf-stacked">
            ...
        </div>
    </div>
ROOT = //div[contains(@class, 'available-repositories-container')]
ITEM_WIDGET
class enabled(parent, logger=None, **kwargs)

The base class view that represent the Available or Enabled Repository

Example html representation:

<div class="enabled-repositories-container">
    <h2>Enabled Repositories</h2>
    <div class="list-group list-view-pf list-view-pf-view">
        <div class="sticky-pagination sticky-pagination-grey">
        <div class="list-group-item list-view-pf-stacked">
            ...
        </div>
    </div>
ROOT = //div[contains(@class, 'enabled-repositories-container')]
ITEM_WIDGET
title
search_category
search_box
search_button
search_types
search_clear
recommended_repos
search(value, category='Available', types=None)

Search repositories.

Parameters
  • value (str) – The string to search by.

  • category (str) – The repository category to search, options: Available, Enabled, Both

  • types (list[str]) – (optional) The repository content types to refine the search

Returns

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.report_template
Module Contents
Classes

ReportTemplatesView

Base view for Satellite pages

ReportTemplateDetailsView

Base view for Satellite pages

ReportTemplateCreateView

Base view for Satellite pages

ReportTemplateGenerateView

Base view for Satellite pages

class airgun.views.report_template.ReportTemplatesView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.report_template.ReportTemplateDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

class template(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

name
default
template_editor
audit
class inputs(parent, logger=None, **kwargs)

A host for widgets list. Items that can be added or removed, mainly used in profile for network interfaces, storage and job template.

Usage:

@View.nested
class resources(RemovableWidgetsItemsListView):
    ROOT = "//fieldset[@id='storage_volumes']"
    ITEMS = "./div/div[contains(@class, 'removable-item')]"
    ITEM_WIDGET_CLASS = ComputeResourceRHVProfileStorageItem
ITEMS = .//div[contains(@class, 'template_inputs')]/following-sibling::div
ITEM_WIDGET_CLASS
add_item_button
class type(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

snippet
class locations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class organizations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
breadcrumb
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.report_template.ReportTemplateCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.report_template.ReportTemplateGenerateView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
email
email_to
inputs
output_format
hosts_filter
generate_at
submit
generated
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.repository
Module Contents
Classes

RepositoriesView

Base view for Satellite pages

RepositoryCreateView

Base view for Satellite pages

AuthorizationEntry

Usually represented by static field and edit button that transform

RepositoryEditView

Base view for Satellite pages

RepositoryPackagesView

Base view for Satellite pages

class airgun.views.repository.RepositoriesView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
new
sync
delete
dialog
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.repository.RepositoryCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

class DockerRepository(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class SpecificHttpProxy(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

http_proxy
upstream_url
upstream_repo_name
verify_ssl
upstream_username
upstream_password
auth_token
mirroring_policy
include_tags
exclude_tags
http_proxy_policy
proxy_policy
ssl_ca_cert
ssl_client_cert
ssl_client_key
class FileRepository(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class SpecificHttpProxy(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

http_proxy
upstream_url
verify_ssl
upstream_username
upstream_password
auth_token
mirroring_policy
publish_via_http
http_proxy_policy
proxy_policy
ssl_ca_cert
ssl_client_cert
ssl_client_key
class OstreeRepository(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class SpecificHttpProxy(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

http_proxy
upstream_url
upstream_sync_policy
sync_policy_custom
verify_ssl
upstream_username
upstream_password
http_proxy_policy
proxy_policy
class YumRepository(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class SpecificHttpProxy(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

http_proxy
arch_restrict
os_restrict
upstream_url
ignore_srpms
verify_ssl
upstream_username
upstream_password
auth_token
download_policy
mirroring_policy
retain_package_versions
checksum_type
publish_via_http
unprotected
gpg_key
ssl_ca_cert
ssl_client_cert
ssl_client_key
http_proxy_policy
proxy_policy
class AnsibleCollectionRepository(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class SpecificHttpProxy(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

http_proxy
arch_restrict
upstream_url
requirements
requirements_btn
auth_url
auth_token
verify_ssl
upstream_username
upstream_password
mirroring_policy
http_proxy_policy
proxy_policy
ssl_ca_cert
ssl_client_cert
ssl_client_key
breadcrumb
name
label
repo_type
submit
repo_content
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.repository.AuthorizationEntry(parent, locator=None, name=None, logger=None)

Usually represented by static field and edit button that transform field into control to change field content to specific value. That control can have different appearances like textarea, input, select and etc. That widget is specific for entity edit pages.

Example html representation:

<dl>
    <dt>
    <dd>
        <form>
        ...
            <span class="fr" ng-hide="editMode || readonly"...>
            <span class="editable-value ng-binding">

Locator example:

//dt[contains(., 'test')]/following-sibling::dd/span
//dt[contains(., 'test')]/following-sibling::dd/input
class edit_field(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

username
password
clear_button
fill(value)

Handle the clear functionality, if bool(value) is False clear the credentials.

class airgun.views.repository.RepositoryEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

class DockerRepository(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class NoSpecificHttpProxy(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

registry_url
upstream_repo_name
repo_name
verify_ssl
upstream_authorization
http_proxy_policy
proxy_policy
mirroring_policy
include_tags
exclude_tags
class YumRepository(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class NoSpecificHttpProxy(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

arch_restrict
os_restrict
verify_ssl
upstream_url
upstream_authorization
metadata_type
retain_package_versions
http_proxy_policy
ignore_srpms
unprotected
gpg_key
download_policy
mirroring_policy
upload_content
upload
proxy_policy
class AnsibleCollectionRepository(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class NoSpecificHttpProxy(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

arch_restrict
upstream_url
requirements
verify_ssl
upstream_authorization
upload_content
upload
http_proxy_policy
proxy_policy
mirroring_policy
class OstreeRepository(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class NoSpecificHttpProxy(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

upstream_url
verify_ssl
upstream_authorization
published_at
http_proxy_policy
proxy_policy
class FileRepository(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

upstream_url
verify_ssl
upstream_authorization
unprotected
mirroring_policy
breadcrumb
actions
dialog
name
label
repo_type
repo_content
content_counts
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.repository.RepositoryPackagesView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
dialog
table
select_all
items_per_page
total_packages
remove_packages
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.rhai
Module Contents
Classes

InsightsOrganizationErrorView

View displayed when no Organization is selected or when the current organization has no

AllRulesView

Base view for Satellite pages

InventoryAllHosts

Base view for Satellite pages

InventoryHostRule

Insights inventory host rule widget

InventoryHostDetails

Base view for Satellite pages

OverviewDetailsView

Base view for Satellite pages

ActionsDetailsView

Base view for Satellite pages

ManageDetailsView

Base view for Satellite pages

AllPlansView

Base view for Satellite pages

PlanEditView

View is a kind of abstract widget that can hold another widgets. Remembers the order,

AddPlanView

Base view for Satellite pages

PlanModalWindow

View is a kind of abstract widget that can hold another widgets. Remembers the order,

class airgun.views.rhai.InsightsOrganizationErrorView(parent, logger=None, **kwargs)

View displayed when no Organization is selected or when the current organization has no manifest

title
message
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

read(widget_names=None)

Reads the contents of the view and presents them as a dictionary.

Parameters

widget_names – If specified, will read only the widgets names in the list.

Returns

A dict of widget_name: widget_read_value where the values are retrieved using the Widget.read().

class airgun.views.rhai.AllRulesView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
search
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.rhai.InventoryAllHosts(parent, logger=None, **kwargs)

Base view for Satellite pages

title
search
actions
systems_count
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.rhai.InventoryHostRule(parent, locator, logger=None)

Insights inventory host rule widget

remove_button
title
class airgun.views.rhai.InventoryHostDetails(parent, logger=None, **kwargs)

Base view for Satellite pages

class rules(parent, logger=None, **kwargs)

A host for widgets list. Items that can be added or removed, mainly used in profile for network interfaces, storage and job template.

Usage:

@View.nested
class resources(RemovableWidgetsItemsListView):
    ROOT = "//fieldset[@id='storage_volumes']"
    ITEMS = "./div/div[contains(@class, 'removable-item')]"
    ITEM_WIDGET_CLASS = ComputeResourceRHVProfileStorageItem
ROOT = .//div[@class='rule-summaries']
ITEMS = .//div[contains(@class, 'rule-summary')]
ITEM_WIDGET_CLASS
hostname
close
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.rhai.OverviewDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
inventory
security_issues
stability_issues
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.rhai.ActionsDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
export_csv
stability_issues
security_issues
class airgun.views.rhai.ManageDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
enable_service
status
account_number
check_connection
save
class airgun.views.rhai.AllPlansView(parent, logger=None, **kwargs)

Base view for Satellite pages

class plan(parent, logger=None, **kwargs)

Parametrized view for a nested plan view. Takes plan name on instantiation

PARAMETERS = ['plan_name']
ROOT
title
delete
edit
ansible_actions
export_csv
add_actions
title
create_plan
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.rhai.PlanEditView(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

plan_name
date
start_time
duration
cancel
save
class airgun.views.rhai.AddPlanView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
name
actions
rules_filter
cancel
save
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.rhai.PlanModalWindow(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

yes
cancel
airgun.views.rhsso_login
Module Contents
Classes

RhssoLoginView

View is a kind of abstract widget that can hold another widgets. Remembers the order,

RhssoExternalLogoutView

View is a kind of abstract widget that can hold another widgets. Remembers the order,

RhssoTwoFactorSuccessView

View is a kind of abstract widget that can hold another widgets. Remembers the order,

RhssoTotpView

View is a kind of abstract widget that can hold another widgets. Remembers the order,

class airgun.views.rhsso_login.RhssoLoginView(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

username
password
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.rhsso_login.RhssoExternalLogoutView(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

login_again
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.rhsso_login.RhssoTwoFactorSuccessView(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

code
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.rhsso_login.RhssoTotpView(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

totp
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.role
Module Contents
Classes

RolesView

Base view for Satellite pages

RoleEditView

Base view for Satellite pages

RoleCreateView

Base view for Satellite pages

RoleCloneView

Clone Role view

class airgun.views.role.RolesView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.role.RoleEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
name
description
locations
organizations
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.role.RoleCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.role.RoleCloneView(parent, logger=None, **kwargs)

Clone Role view

airgun.views.settings
Module Contents
Classes

SettingsView

Base view for Satellite pages

class airgun.views.settings.SettingsView(parent, logger=None, **kwargs)

Base view for Satellite pages

class Email(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

test_email_button
title
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

wait_for_update()

Wait for value to update

airgun.views.smart_class_parameter
Module Contents
Classes

MatcherAttribute

Represent smart class parameter matcher attribute pair. Usually, it

SmartClassParameterContent

View is a kind of abstract widget that can hold another widgets. Remembers the order,

SmartClassParametersView

Base view for Satellite pages

SmartClassParameterEditView

Base view for Satellite pages

class airgun.views.smart_class_parameter.MatcherAttribute(parent, logger=None, **kwargs)

Represent smart class parameter matcher attribute pair. Usually, it looks like as two fields separated by ‘=’ mark

matcher_attribute_type
matcher_attribute_value
class airgun.views.smart_class_parameter.SmartClassParameterContent(parent, locator, logger=None)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class optional_input_validators(parent, logger=None)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

expander
required
validator_type
validator_rule
class prioritize_attribute_order(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

order
merge_overrides
merge_default
avoid_duplicates
class matchers(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

table
add_new_matcher
fill(values)

Add and fill all matchers provided Example:

[
    {
        'Attribute type':
        {
            'matcher_attribute_type': 'os',
            'matcher_attribute_value': 'x86'
        },
        'Value': 'newvalue'
    },
    {
        'Attribute type':
        {
            'matcher_attribute_type': 'fqdn',
            'matcher_attribute_value': 'myhost.com'
        },
        'Value': 'newvalue2'
    }
]
ROOT
key
description
puppet_environment
puppet_class
override
parameter_type
default_value
omit
hidden
class airgun.views.smart_class_parameter.SmartClassParametersView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.smart_class_parameter.SmartClassParameterEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
parameter
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.subnet
Module Contents
Classes

SubnetsView

Base view for Satellite pages

SubnetCreateView

Base view for Satellite pages

SubnetEditView

Base view for Satellite pages

class airgun.views.subnet.SubnetsView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.subnet.SubnetCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

class subnet(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

name
description
protocol
network_address
network_prefix
network_mask
gateway_address
primary_dns
secondary_dns
ipam
vlanid
mtu
boot_mode
class remote_execution(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Remote Execution
capsules
class domains(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class capsules(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

dhcp_capsule
tftp_capsule
reverse_dns_capsule
discovery_capsule
class parameters(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

subnet_params
class locations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class organizations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
breadcrumb
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.subnet.SubnetEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.subscription
Module Contents
Classes

SubscriptionSearch

Searchbar for table filtering

SubscriptionSearchableViewMixin

Mixin which adds airgun.widgets.Search widget and

DeleteSubscriptionConfirmationDialog

Usual confirmation dialog with two buttons and close 'x' button in the

SatSubscriptionsViewTable

Table used on Red Hat Subscriptions page. It's mostly the same as

ProductContentItemsList

Models list of enabled products (Subscriptions -> any ->

SubscriptionColumnsFilter

This is the list of interaction items for when opening up the selectable customizable

SubscriptionListView

List of all subscriptions.

ManageManifestView

Base view for Satellite pages

DeleteManifestConfirmationView

Base view for Satellite pages

AddSubscriptionView

Base view for Satellite pages

SubscriptionDetailsView

Base view for Satellite pages

class airgun.views.subscription.SubscriptionSearch(parent, logger=None, **kwargs)

Searchbar for table filtering

search_field
search_button
class airgun.views.subscription.SubscriptionSearchableViewMixin

Mixin which adds airgun.widgets.Search widget and airgun.widgets.Search.search() to your view. It’s useful for _most_ entities list views where searchbox and results table are present.

Note that class which uses this mixin should have :attr: table attribute.

searchbox
class airgun.views.subscription.DeleteSubscriptionConfirmationDialog(parent, logger=None, **kwargs)

Usual confirmation dialog with two buttons and close ‘x’ button in the right corner. Has nothing in common with javascript alert, confirm or prompt pop-ups.

Example html representation:

<div class="modal-content">
    <button type="button" class="close" ... ng-click="cancel()">
    <div class="modal-footer ng-scope">
        <button class="btn btn-danger" ng-click="ok()">
        <button class="btn ..." ng-click="cancel()"...>

Locator example:

//div[@class='modal-content']
confirm_dialog
cancel_dialog
class airgun.views.subscription.SatSubscriptionsViewTable(parent, locator, column_widgets=None, assoc_column=None, rows_ignore_top=None, rows_ignore_bottom=None, top_ignore_fill=False, bottom_ignore_fill=False, logger=None)

Table used on Red Hat Subscriptions page. It’s mostly the same as normal table, but when search returns no results, it does display single row with message. Not to be confused with SatSubscriptionsTable, which is not used on that page

property has_rows

Boolean value whether table contains some elements (rows) or is empty.

class airgun.views.subscription.ProductContentItemsList(parent, locator, logger=None)

Models list of enabled products (Subscriptions -> any -> Enabled products) Main reason is that page is constructed when tab is activated. There is no HTTP request, but delay is visible nevertheless - and during that time, message about no enabled product can be seen. We have to wait for a short while before we can be sure that there really are no products.

ITEMS = .//div[contains(@class, 'list-group-item-heading')]
property has_items
read()

Each object should implement read so it is easy to get the value of such object.

When you implement this method, the exact return value is up to you but it MUST be consistent with what fill() takes.

fill(value)

Interactive objects like inputs, selects, checkboxes, et cetera should implement fill.

When you implement this method, it MUST ALWAYS return a boolean whether the value was changed. Otherwise it can break.

For actual filling, please use fill_with(). It offers richer interface for filling.

Returns

A boolean whether it changed the value or not.

class airgun.views.subscription.SubscriptionColumnsFilter(parent, locator, logger=None)

This is the list of interaction items for when opening up the selectable customizable checkboxes

ITEMS_LOCATOR = //div[@id='subscriptionTableTooltip']//li/span
CHECKBOX_LOCATOR = //div[@id='subscriptionTableTooltip']//li/span[.='{}']/preceding::input[1]
property is_open
open()
close()
checkboxes()
read()

Read values of checkboxes

fill(values)

Check or uncheck one of the checkboxes

class airgun.views.subscription.SubscriptionListView(parent, logger=None, **kwargs)

List of all subscriptions.

table
add_button
manage_manifest_button
export_csv_button
delete_button
progressbar
confirm_deletion
columns_filter_checkboxes
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

is_searchable()

Customized is_searchable

class airgun.views.subscription.ManageManifestView(parent, logger=None, **kwargs)

Base view for Satellite pages

class manifest(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

red_hat_cdn_url
manifest_file
refresh_button
delete_button
class manifest_history(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Manifest History
table
ROOT = //div[@role="dialog" and @tabindex][div//h4[normalize-space(.)="Manage Manifest"]]
close_button
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

wait_animation_end()
class airgun.views.subscription.DeleteManifestConfirmationView(parent, logger=None, **kwargs)

Base view for Satellite pages

ROOT = //div[@role="dialog" and @tabindex][div//h4[normalize-space(.)="Confirm delete manifest"]]
message
delete_button
cancel_button
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

wait_animation_end()
class airgun.views.subscription.AddSubscriptionView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
table
submit_button
cancel_button
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.subscription.SubscriptionDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

class details(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

associations
provided_products
class product_content(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = Product Content
product_content_list
breadcrumb
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.sync_status
Module Contents
Classes

SyncStatusTableNode

Table row interface to implement a sync status table row tree node

SyncStatusTable

This is a representation of a tree view with columns realized as a

SyncStatusView

Base view for Satellite pages

exception airgun.views.sync_status.ParentNodeNotFoundError

Raise when not able to find a parent for a node item

exception airgun.views.sync_status.ReservedToSectionOnlyError

Mainly raised when adding a child to a non section node

exception airgun.views.sync_status.NodeNotFoundError

Raise when a node was not found

class airgun.views.sync_status.SyncStatusTableNode(parent=None, row=None)

Table row interface to implement a sync status table row tree node

CHECKBOX = ./td/input[@type='checkbox']
RESULT_PROGRESS = .//a[contains(@class, 'progress')]
SECTION_EXPANDER = ./td/span[contains(@class, 'expander')]
__getitem__(name)

Return the child name

__contains__(name)

Check child with name is exist in this node

property browser

Return the browser

id()

Return the id of this node

is_root()

Return whether this node is root node

is_child_of(node)

Return whether this node is a child of node

name()

Return the name of this node, the node name is the text content of the first column.

property result

Return the result column content

property checkbox

return the checkbox element of this row if exist

Return the result link element of this row

property progress

Return the progress element of this row if exist

property expander

Return the expander element of this row if exist

property expanded

Return True in case this row is expanded

expand()

Expand this node

is_section()

Return whether this row is a section, a row is a section if has expander.

add_child(node)

Add a child node to this node

read()

Read this node and sub nodes if exist

select(value)

Select or un-select if checkbox is in the row, the checkbox exist only for repository row.

fill(values)

Fill the node and sub nodes with values

class airgun.views.sync_status.SyncStatusTable(parent, locator, column_widgets=None, assoc_column=None, rows_ignore_top=None, rows_ignore_bottom=None, top_ignore_fill=False, bottom_ignore_fill=False, logger=None)

This is a representation of a tree view with columns realized as a table. The first column is the tree expander where root item is the product. Each item and sub items located in their own table row.

Tree representation of the first column example:

  • Red Hat Enterprise Linux Server
    • 7Server
      • x86_64
        • [ ] Red Hat Enterprise Linux 7 Server RPMs x86_64

          7Server

    • Red Hat Satellite Tools 6.2 for RHEL 7 Server RPMs x86_64

  • zoo custom product
    • [ ] zoo custom repo

  • an other custom repo
    • [ ] an other custom repo

nodes()

Return the tree nodes representation of this table

read()

Return a dict with nodes properties

fill(values)

Fill the node and sub nodes, mainly select or un-select the repositories.

get_node_from_path(node_path)

Return a node from it’s path representation

Parameters

node_path – a list or tuple representing the path to a node, for example: (‘product1’, ‘repo1’)

Returns

SyncStatusTableNode

class airgun.views.sync_status.SyncStatusView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
collapse_all
expand_all
select_none
select_all
active_only
table
synchronize_now
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.sync_templates
Module Contents
Classes

SyncTemplatesView

Base view for Satellite pages

TemplatesReportView

Base view for Satellite pages

class airgun.views.sync_templates.SyncTemplatesView(parent, logger=None, **kwargs)

Base view for Satellite pages

class ImportTemplates(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

associate
branch
dirname
filter
force_import
lock
negate
prefix
repo
class ExportTemplates(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

branch
dirname
filter
metadata_export_mode
negate
repo
breadcrumb
title
sync_type
submit
template
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

before_fill(values)

Wait for Sync Type Radio Button to be displayed

class airgun.views.sync_templates.TemplatesReportView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
REPORTS = //div[contains(@class, 'list-group-item')]
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.syncplan
Module Contents
Classes

SyncPlansView

Base view for Satellite pages

SyncPlanCreateView

Base view for Satellite pages

SyncPlanEditView

Base view for Satellite pages

class airgun.views.syncplan.SyncPlansView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.syncplan.SyncPlanCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

breadcrumb
name
description
interval
cron_expression
date_time
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.syncplan.SyncPlanEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

class details(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

name
description
date_time
next_sync
recurring_logic
enabled
interval
cron_expression
products_count
class products(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
breadcrumb
actions
dialog
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.task
Module Contents
Classes

TaskReadOnlyEntry

Similar to EditableEntry and specific for the same page types, but cannot

TaskReadOnlyEntryError

Similar to EditableEntry and specific for the same page types, but cannot

TasksView

Base view for Satellite pages

TaskDetailsView

Base view for Satellite pages

class airgun.views.task.TaskReadOnlyEntry(parent, locator=None, name=None, logger=None)

Similar to EditableEntry and specific for the same page types, but cannot be modified.

Example html representation:

<dl>
    <dt>
    <dd>
        <form>
        ...
            <span class="ng-scope">No</span>

Locator example:

//dt[contains(., 'test')]/following-sibling::dd
//dt[contains(., 'test')]/following-sibling::dd/span
BASE_LOCATOR = //span[contains(., '{}') and contains(@class,...
class airgun.views.task.TaskReadOnlyEntryError(parent, locator=None, name=None, logger=None)

Similar to EditableEntry and specific for the same page types, but cannot be modified.

Example html representation:

<dl>
    <dt>
    <dd>
        <form>
        ...
            <span class="ng-scope">No</span>

Locator example:

//dt[contains(., 'test')]/following-sibling::dd
//dt[contains(., 'test')]/following-sibling::dd/span
BASE_LOCATOR = //span[contains(., '{}')]//parent::div/following-sibling::pre
class airgun.views.task.TasksView(parent, logger=None, **kwargs)

Base view for Satellite pages

class RunningChart(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = .//div[@id='running-tasks-card']
name
total
class PausedChart(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = .//div[@id='paused-tasks-card']
name
total
class StoppedChart(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = .//div[@id='stopped-tasks-card']
name
table
class ScheduledChart(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

ROOT = .//div[@id='scheduled-tasks-card']
name
total
title
focus
table
pagination
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.task.TaskDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

class task(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

name
result
triggered_by
execution_type
start_at
started_at
ended_at
start_before
state
progressbar
output
errors
breadcrumb
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

wait_for_result(timeout=60, delay=1)

Wait for invocation job to finish

airgun.views.user
Module Contents
Classes

UsersView

Base view for Satellite pages

UserDetailsView

Base view for Satellite pages

UserCreateView

Base view for Satellite pages

class airgun.views.user.UsersView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.user.UserDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

class user(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

login
firstname
lastname
mail
description
language
timezone
auth
password
confirm
class locations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class organizations(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

resources
class roles(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

admin
resources
breadcrumb
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.user.UserCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.usergroup
Module Contents
Classes

UserGroupsView

Base view for Satellite pages

UserGroupDetailsView

Base view for Satellite pages

UserGroupCreateView

Base view for Satellite pages

class airgun.views.usergroup.UserGroupsView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new_on_blank_page
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.usergroup.UserGroupDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

class usergroup(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = User Group
name
usergroups
users
class roles(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

admin
resources
class external_groups(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

TAB_NAME = External Groups
table
add_external_user_group
name
auth_source
before_fill(values)

A hook invoked before the loop of filling is invoked.

If it returns None, the was_changed in fill() does not change. If it returns a boolean, then on True it modifies the was_changed to True as well.

Parameters

values – The same values that are passed to fill()

breadcrumb
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.usergroup.UserGroupCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.virtwho_configure
Module Contents
Classes

VirtwhoConfigureStatus

The status for virtwho configure can be: ok, info, warning.

VirtwhoConfigureScript

Return the virtwho configure script by innerHTML.

VirtwhoConfiguresDebug

Return the virtwho configure debug status.

VirtwhoConfiguresView

Base view for Satellite pages

VirtwhoConfigureCreateView

Base view for Satellite pages

VirtwhoConfigureEditView

Base view for Satellite pages

VirtwhoConfigureDetailsView

Base view for Satellite pages

class airgun.views.virtwho_configure.VirtwhoConfigureStatus(parent, locator, logger=None)

The status for virtwho configure can be: ok, info, warning.

ok: The virt-who report has not arrived within the interval,

which indicates there was no change on hypervisor

info: The configuration was not deployed yet or the virt-who was

unable to report the status

warning: The configuration is invalid and not available.

STATUS_ICON = .//span[contains(@class, 'virt-who-config-report-status')]
property status

The attributes for the element is such as: virt-who-config-report-status pficon-ok status-ok virt-who-config-report-status pficon-info status-info

read()

Returns current status

fill(value)

Interactive objects like inputs, selects, checkboxes, et cetera should implement fill.

When you implement this method, it MUST ALWAYS return a boolean whether the value was changed. Otherwise it can break.

For actual filling, please use fill_with(). It offers richer interface for filling.

Returns

A boolean whether it changed the value or not.

class airgun.views.virtwho_configure.VirtwhoConfigureScript(parent, logger=None, **kwargs)

Return the virtwho configure script by innerHTML. It will preserve the line break and whitespace.

SCRIPT_PRE = .//pre[@id='config_script']
property content
read()

Returns the script content

fill(value)

Interactive objects like inputs, selects, checkboxes, et cetera should implement fill.

When you implement this method, it MUST ALWAYS return a boolean whether the value was changed. Otherwise it can break.

For actual filling, please use fill_with(). It offers richer interface for filling.

Returns

A boolean whether it changed the value or not.

class airgun.views.virtwho_configure.VirtwhoConfiguresDebug(parent, logger=None, **kwargs)

Return the virtwho configure debug status.

DEBUG = .//span[contains(@class,'config-debug')]
STATUS = .//span[contains(@class,'fa-check')]
property status
read()

Returns the debug status

fill(value)

Interactive objects like inputs, selects, checkboxes, et cetera should implement fill.

When you implement this method, it MUST ALWAYS return a boolean whether the value was changed. Otherwise it can break.

For actual filling, please use fill_with(). It offers richer interface for filling.

Returns

A boolean whether it changed the value or not.

class airgun.views.virtwho_configure.VirtwhoConfiguresView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.virtwho_configure.VirtwhoConfigureCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

class HypervisorForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

server
username
password
class LibvirtForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

server
username
class KubevirtForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

server
kubeconfig
class NutanixForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

server
username
password
prism_flavor
filtering_content
class FilterUnlimitedForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

class FilterWhitelistForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

filter_hosts
filter_host_parents
class FilterBlacklistForm(parent, logger=None, **kwargs)

View is a kind of abstract widget that can hold another widgets. Remembers the order, so therefore it can function like a form with defined filling order.

It looks like this:

class Login(View):
    user = SomeInputWidget('user')
    password = SomeInputWidget('pass')
    login = SomeButtonWidget('Log In')

    def a_method(self):
        do_something()

The view is usually instantiated with an instance of widgetastic.browser.Browser, which will then enable resolving of all of the widgets defined.

Parameters
  • parent – A parent View or widgetastic.browser.Browser

  • additional_context – If the view needs some context, for example - you want to check that you are on the page of user XYZ but you can also be on the page for user FOO, then you shall use the additional_context to pass in required variables that will allow you to detect this.

exclude_hosts
exclude_host_parents
breadcrumb
name
interval
satellite_url
hypervisor_id
debug
proxy
no_proxy
filtering
filtering_content
hypervisor_type
hypervisor_content
submit
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.virtwho_configure.VirtwhoConfigureEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.virtwho_configure.VirtwhoConfigureDetailsView(parent, logger=None, **kwargs)

Base view for Satellite pages

class overview(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

status
debug
hypervisor_type
hypervisor_server
hypervisor_username
interval
satellite_url
hypervisor_id
filtering
filter_hosts
filter_host_parents
exclude_hosts
exclude_host_parents
proxy
no_proxy
kubeconfig_path
prism_flavor
_label_locator = //span[contains(@class, '{class_name}')]/../preceding-sibling::div/strong
status_label
debug_label
hypervisor_type_label
hypervisor_server_label
hypervisor_username_label
interval_label
satellite_url_label
hypervisor_id_label
filtering_label
filter_hosts_label
filter_host_parents_label
exclude_hosts_label
exclude_host_parents_label
proxy_label
no_proxy_label
kubeconfig_path_label
prism_flavor_label
class deploy(parent, logger=None, **kwargs)

Regular primary level Tab.

Usage:

@View.nested
class mytab(SatTab):
    TAB_NAME = 'My Tab'
@View.nested
class subscriptions(SatTab):
    # no need to specify 'TAB_NAME', it will be set to 'Subscriptions'
    # automatically
    pass

Note that TAB_NAME is optional and if it’s absent - capitalized class name is used instead, which is useful for simple tab names like ‘Subscriptions’

command
script
download
breadcrumb
edit
delete
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

airgun.views.webhook
Module Contents
Classes

WebhooksView

Base view for Satellite pages

WebhookCreateView

Base view for Satellite pages

WebhookEditView

Base view for Satellite pages

DeleteWebhookConfirmationView

Base view for Satellite pages

class airgun.views.webhook.WebhooksView(parent, logger=None, **kwargs)

Base view for Satellite pages

title
new
table
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.webhook.WebhookCreateView(parent, logger=None, **kwargs)

Base view for Satellite pages

class general(parent, logger=None, **kwargs)

Represents the Patternfly Tab widget.

Selects itself automatically when any child widget gets accessed, ensuring that the widget is visible.

https://www.patternfly.org/v4/documentation/react/components/tabs

subscribe_to
name
target_url
template
http_method
enabled
class credentials(parent, logger=None, **kwargs)

Represents the Patternfly Tab widget.

Selects itself automatically when any child widget gets accessed, ensuring that the widget is visible.

https://www.patternfly.org/v4/documentation/react/components/tabs

user
password
verify_ssl
capsule_auth
certs
class additional(parent, logger=None, **kwargs)

Represents the Patternfly Tab widget.

Selects itself automatically when any child widget gets accessed, ensuring that the widget is visible.

https://www.patternfly.org/v4/documentation/react/components/tabs

content_type
headers
ROOT = //div[@role="dialog" and @tabindex][div//h4]
cancel_button
submit_button
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

wait_for_popup()
class airgun.views.webhook.WebhookEditView(parent, logger=None, **kwargs)

Base view for Satellite pages

property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

class airgun.views.webhook.DeleteWebhookConfirmationView(parent, logger=None, **kwargs)

Base view for Satellite pages

ROOT = //div[@role="dialog" and @tabindex][div//h4[normalize-space(.)="Confirm Webhook Deletion"]]
delete_button
cancel_button
property is_displayed

Overrides the Widget.is_displayed(). The difference is that if the view does not have the root locator, it assumes it is displayed.

Returns

bool

wait_animation_end()

Submodules

airgun.browser

Tools to help getting selenium and widgetastic browser instance to run UI tests.

Module Contents
Classes

SeleniumBrowserFactory

Factory which creates selenium browser of desired provider (selenium,

AirgunBrowserPlugin

Plug-in for AirgunBrowser which adds satellite-specific

AirgunBrowser

A wrapper around widgetastic.browser.Browser which injects

Attributes

LOGGER

airgun.browser.LOGGER
class airgun.browser.SeleniumBrowserFactory(provider=None, browser=None, test_name=None, session_cookie=None, hostname=None)

Factory which creates selenium browser of desired provider (selenium, docker or saucelabs). Creates all required capabilities, passes certificate checks and applies other workarounds. It is also capable of finalizing the browser when it’s not needed anymore (closes the browser, stops docker container, sends test results to saucelabs etc).

Usage:

# init factory
factory = SeleniumBrowserFactory(test_name=test_name)

# get factory browser
selenium_browser = factory.get_browser()

# navigate to desired url

# perform post-init steps (e.g. skipping certificate error screen)
factory.post_init()

# perform your test steps

# perform factory clean-up
factory.finalize(passed)
get_browser()

Returns selenium webdriver instance of selected provider and browser.

Returns

selenium webdriver instance

Raises

ValueError: If wrong provider or browser specified.

post_init()

Perform all required post-init tweaks and workarounds. Should be called _after_ proceeding to desired url.

Returns

None

finalize(passed=True)

Finalize browser - close browser window, report results to saucelabs or close docker container if needed.

Parameters

passed (bool) – Boolean value indicating whether test passed or not. Is only used for saucelabs provider.

Returns

None

Add the session cookie (if provided) to the webdriver

_get_selenium_browser()

Returns selenium webdriver instance of selected browser.

Note: should not be called directly, use get_browser() instead.

Raises

ValueError: If wrong browser specified.

_get_remote_browser()

Returns remote webdriver instance of selected browser.

Note: should not be called directly, use get_browser() instead.

class airgun.browser.AirgunBrowserPlugin(*args, **kwargs)

Plug-in for AirgunBrowser which adds satellite-specific JavaScript to make sure page is loaded completely. Checks for absence of jQuery, AJAX, Angular requests, absence of spinner indicating loading progress and ensures document.readyState is “complete”.

ENSURE_PAGE_SAFE = Multiline-String
Show Value
 1        function jqueryInactive() {
 2         return (typeof jQuery === "undefined") ? true : jQuery.active < 1
 3        }
 4        function ajaxInactive() {
 5         return (typeof Ajax === "undefined") ? true :
 6            Ajax.activeRequestCount < 1
 7        }
 8        function angularNoRequests() {
 9         if (typeof angular === "undefined") {
10           return true
11         } else if (typeof angular.element(
12             document).injector() === "undefined") {
13           injector = angular.injector(["ng"]);
14           return injector.get("$http").pendingRequests.length < 1
15         } else {
16           return angular.element(document).injector().get(
17             "$http").pendingRequests.length < 1
18         }
19        }
20        function spinnerInvisible() {
21         spinner = document.getElementById("vertical-spinner")
22         return (spinner === null) ? true : spinner.style["display"] == "none"
23        }
24        function reactLoadingInvisible() {
25         react = document.querySelector("#reactRoot .loading-state")
26         return react === null
27        }
28        function anySpinnerInvisible() {
29         spinners = Array.prototype.slice.call(
30          document.querySelectorAll('.spinner')
31          ).filter(function (item,index) {
32            return item.offsetWidth > 0 || item.offsetHeight > 0
33             || item.getClientRects().length > 0;
34           }
35          );
36         return spinners.length === 0
37        }
38        return {
39            jquery: jqueryInactive(),
40            ajax: ajaxInactive(),
41            angular: angularNoRequests(),
42            spinner: spinnerInvisible(),
43            any_spinner: anySpinnerInvisible(),
44            react: reactLoadingInvisible(),
45            document: document.readyState == "complete",
46        }
property ignore_ensure_page_safe_timeout
ensure_page_safe(timeout='30s')

Ensures page is fully loaded. Default timeout was 10s, this changes it to 30s. If self.ignore_ensure_page_safe_timeout is True, the function doesn’t raise an exception and continues as if the page was safe instead. This can be used to bypass some bugs, e.g. https://bugzilla.redhat.com/show_bug.cgi?id=2106022

before_click(element, locator=None)

Invoked before clicking on an element. Ensure page is fully loaded before clicking.

after_click(element, locator=None)

Invoked after clicking on an element. Ensure page is fully loaded before proceeding further.

class airgun.browser.AirgunBrowser(selenium, session, extra_objects=None)

A wrapper around widgetastic.browser.Browser which injects airgun.session.Session and AirgunBrowserPlugin.

get_client_datetime()

Make Javascript call inside of browser session to get exact current date and time. In that way, we will be isolated from any issue that can happen due different environments where test automation code is executing and where browser session is opened. That should help us to have successful run for docker containers or separated virtual machines When calling .getMonth() you need to add +1 to display the correct month. Javascript count always starts at 0, so calling .getMonth() in May will return 4 and not 5.

Returns

Datetime object that contains data for current date and time on a client

get_downloads_list()

Open browser’s downloads screen and return a list of downloaded files.

Returns

list of strings representing file URIs

get_file_content(uri)

Get file content by its URI from browser’s downloads page.

Returns

bytearray representing file content

Raises

Exception – when error code instead of file content received

save_downloaded_file(file_uri=None, save_path=None)

Save local or remote browser’s automatically downloaded file to specified local path. Useful when you don’t know exact file name or path where file was downloaded or you’re using remote driver with no access to worker’s filesystem (e.g. saucelabs).

Usage example:

view.widget_which_triggers_file_download.click()
path = self.browser.save_downloaded_file()
with open(file_path, newline='') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        # process file contents
Parameters
  • file_uri (str optional) – URI of file. If not specified - browser’s latest downloaded file will be selected

  • save_path (str optional) – local path where the file should be saved. If not specified - temp_dir from airgun settings will be used in case of remote session or just path to saved file in case local one.

check_alert(locator)
get_alert(squash=False)

Returns the current alert/PF4 alert object.

Parameters

squash (bool optional) – Whether or not to squash errors during alert handling. Default False

Raises

selenium.common.exceptions.NoAlertPresentException

handle_alert(cancel=False, wait=30.0, squash=False, prompt=None, check_present=False)

Extend the behaviour of widgetstatic.browser.handle_alert to handle PF4 alerts

ignore_ensure_page_safe_timeout()
airgun.exceptions

Exceptions raised by airgun

airgun.fixtures

Handy fixtures which you may want to use in your tests.

Just add the following line into your conftest.py:

pytest_plugins = ["airgun.fixtures"]
Module Contents
Functions

session(request)

Session fixture which automatically initializes (but does not start!)

autosession(request)

Session fixture which automatically initializes and starts airgun UI

airgun.fixtures.session(request)

Session fixture which automatically initializes (but does not start!) airgun UI session and correctly passes current test name to it.

Usage:

def test_foo(session):
    with session:
        # your ui test steps here
        session.architecture.create({'name': 'bar'})
airgun.fixtures.autosession(request)

Session fixture which automatically initializes and starts airgun UI session and correctly passes current test name to it. Use it when you want to have a session started before test steps and closed after all of them, i.e. when you don’t need manual control over when the session is started or closed.

Usage:

def test_foo(autosession):
    # your ui test steps here
    autosession.architecture.create({'name': 'bar'})
airgun.navigation

AirGun’s implementation of base navigation and navigate steps.

Module Contents
Classes

NavigateStep

AirGun's version of navmazing.NavigateStep with custom

Navigate

Wrapper around navmazing.Navigate which adds airgun browser as

Attributes

navigator

class airgun.navigation.NavigateStep(obj, navigate_obj, logger=None)

AirGun’s version of navmazing.NavigateStep with custom implementations of navmazing.NavigateStep.am_i_here and navmazing.NavigateStep.go and ability to work with views.

VIEW
view()

Cached property which returns instance of view, which was defined for current navigate step by VIEW class attribute.

create_view(view_class, additional_context=None)

Method which creates an instance of view, defined by view_class.

Created instance will have references to entity, airgun.browser.AirgunBrowser and airgun.session.Session set as instance attributes self.context['entity'], self.browser and self.extra.session correspondingly.

Parameters
  • view_class (widgetastic.widget.View) – class of view to create

  • additional_context (dict optional) – any additional context you want to include. entity is set to current navigate step entity by default

Returns

instance of view

Return type

widgetastic.widget.View

am_i_here(*args, **kwargs)

Describes if the navigation is already at the requested destination.

By default, airgun relies on view’s is_displayed property to determine whether navigation succeeded. If positional argument entity_name was passed and view has BreadCrumb widget, it will also ensure second location in breadcrumb is provided entity name.

This method may be overridden on specific entity’s NavigateStep level for more complex logic if needed.

Returns

whether navigator is at requested destination or not.

Return type

bool

go(_tries=0, *args, **kwargs)

Wrapper around navmazing.NavigateStep.go() which returns instance of view after successful navigation flow.

Returns

view instance if class attribute VIEW is set or None otherwise

class airgun.navigation.Navigate(browser=None)

Wrapper around navmazing.Navigate which adds airgun browser as class attribute.

For more information about Navigate please refer to navmazing docs.

airgun.navigation.navigator
airgun.session

Session controller which manages UI session

Module Contents
Classes

Session

A session context manager which is a key controller in airgun.

Attributes

LOGGER

airgun.session.LOGGER
class airgun.session.Session(session_name=None, user=None, password=None, session_cookie=None, hostname=None, url=None, login=True)

A session context manager which is a key controller in airgun.

It is responsible for initializing and starting airgun.browser.AirgunBrowser, navigating to satellite, performing post-init browser tweaks, initializing navigator, all available UI entities, and logging in to satellite.

When session is about to close, it saves a screenshot in case of any exception, attempts to log out from satellite and performs all necessary browser closure steps like quitting the browser, sending results to saucelabs, stopping docker container etc.

For tests level it offers direct control over when UI session is started and stopped as well as provides all the entities available without the need to import and initialize them manually.

Usage:

def test_foo():
    with Session('test_foo') as session:
        session.architecture.create({'name': 'bar'})
        [...]

    # steps executed after UI session was closed

You can also pass credentials different from default ones specified in settings like that:

with Session(test_name, user='foo', password='bar'):
    # [...]

Every test may use multiple sessions if needed:

def test_foo():
    with Session('test_foo', 'admin', 'password') as admin_session:
        # UI steps, performed by 'admin' user
        admin_session.user.create({'login': 'user1', 'password: 'pwd'})
        # [...]
    with Session('test_foo', 'user1', 'pwd1') as user1_session:
        # UI steps, performed by 'user1' user
        user1_session.architecture.create({'name': 'bar'})
        # [...]

Nested sessions are supported as well, just don’t forget to use different variables for sessions:

def test_foo():
    with Session('test_foo', 'admin', 'password') as admin_session:
        # UI steps, performed by 'admin' user only
        admin_session.user.create({'login': 'user1', 'password: 'pwd'})
        # [...]
        with Session('test_foo', 'user1', 'pwd1') as user1_session:
            # UI steps, performed by 'user1' user OR 'admin' in
            # different browser instances
            user1_session.architecture.create({'name': 'bar'})
            admin_session.architecture.search('bar')
            # [...]
        # UI steps, performed by 'admin' user only
        admin_session.user.delete({'login': 'user1'})
__call__(user=None, password=None, session_cookie=None, url=None, login=None)

Stores provided values. This allows tests to provide additional value when Session object is returned from fixture and used as context manager. Arguments are the same as when initializing Session object, except session_name.

__enter__()

Just a shim to make it compatible with context manager protocol. The real work is done by _open the first time any entity is requested.

__exit__(exc_type, exc_value, traceback)

Attempts to log out, saves the screenshot and performs all required session closure activities.

NOTE: exceptions during logout or saving screenshot are just logged and

not risen not to shadow real session result.

_open(entity)

Initializes requested entity. If this is first time session requests an entity, also initialize and prepare browser.

_prepare_browser(url)

Starts the browser, navigates to satellite, performs post-init browser tweaks, initializes navigator and UI entities, and logs in to satellite.

take_screenshot()

Take screen shot from the current browser window.

The screenshot named f’{self.name}-screenshot-YYYY-mm-dd_HH_MM_SS.png’ will be stored in the path f’{settings.screenshots_path}/YYYY-mm-dd/’.

All directories will be created if they don’t exist. Make sure that the user running Robottelo has the right permissions to create files and directories.

This method is called automatically in case any exception during UI session happens.

activationkey()

Instance of Activation Key entity.

ansibleroles()

Instance of Ansible Roles entity.

ansiblevariables()

Instance of Ansible Variables entity.

architecture()

Instance of Architecture entity.

audit()

Instance of Audit entity.

bookmark()

Instance of Bookmark entity.

cloudinventory()

Instance of RH Cloud Inventory Upload entity.

cloudinsights()

Instance of RH Cloud Insights entity.

computeprofile()

Instance of Compute Profile entity.

configgroup()

Instance of Config Group entity.

containerimagetag()

Instance of Container Image Tags entity.

contentcredential()

Instance of Content Credential entity.

contenthost()

Instance of Content Host entity.

computeresource()

Instance of ComputeResource entity.

contentview()

Instance of Content View entity.

contentview_new()

Instance of the New Content View entity.

contentviewfilter()

Instance of Content View Filter entity.

dashboard()

Instance of Dashboard entity.

discoveredhosts()
discoveryrule()

Instance of Discovery Rule entity.

domain()

Instance of domain entity.

errata()

Instance of Errata entity.

filter()

Instance of Filter entity.

hardwaremodel()

Instance of Hardware Model entity.

host()

Instance of Host entity.

host_new()

Instance of Host entity.

hostcollection()

Instance of Host Collection entity.

hostgroup()

Instance of Host Group entity.

http_proxy()

Instance of HTTP Proxy entity.

insightsaction()

Instance of RHAI Action entity.

insightsinventory()

Instance of RHAI Inventory entity.

insightsoverview()

Instance of RHAI Overview entity.

insightsplan()

Instance of RHAI Plan entity.

insightsrule()

Instance of RHAI Rule entity.

jobinvocation()

Instance of Job Invocation entity.

insightsmanage()

Instance of RHAI Manage entity.

jobtemplate()

Instance of Job Template entity.

ldapauthentication()

Instance of LDAP Authentication entity.

lifecycleenvironment()

Instance of LCE entity.

location()

Instance of Location entity.

login()

Instance of Login entity.

operatingsystem()

Instance of Operating System entity.

organization()

Instance of Organization entity.

oscapcontent()

Instance of OSCAP Content entity.

oscappolicy()

Instance of OSCAP Policy entity.

oscaptailoringfile()

Instance of OSCAP Tailoring File entity.

package()

Instance of Packge entity.

media()

Instance of Media entity.

modulestream()

Instance of Module Stream entity.

partitiontable()

Instance of Partition Table entity.

puppetclass()

Instance of Puppet Class entity.

puppetenvironment()

Instance of Puppet Environment entity.

product()

Instance of Product entity.

provisioningtemplate()

Instance of Provisioning Template entity.

reporttemplate()

Instance of Report Template entity.

redhatrepository()

Instance of Red Hat Repository entity.

repository()

Instance of Repository entity.

role()

Instance of Role entity.

rhsso_login()

Instance of RHSSOLoginEntity entity.

settings()

Instance of Settings entity.

sc_parameter()

Instance of Smart Class Parameter entity.

subnet()

Instance of Subnet entity.

subscription()

Instance of Subscription entity.

syncplan()

Instance of Sync Plan entity.

sync_status()

Instance of Sync Status entity

sync_template()

Instance of Sync Templates entity

task()

Instance of Task entity.

user()

Instance of User entity.

usergroup()

Instance of User Group entity.

virtwho_configure()

Instance of Virtwho Configure entity.

webhook()

Instance of Webhook entity.

airgun.settings
Module Contents
Classes

AirgunSettings

SatelliteSettings

SeleniumSettings

WebKaifukuSettings

Settings

Functions

get_project_root()

Return the path to the project root directory.

Attributes

SETTINGS_FILE_NAME

airgun.settings.SETTINGS_FILE_NAME = settings.ini
airgun.settings.get_project_root()

Return the path to the project root directory.

Returns

A directory path.

Return type

str

class airgun.settings.AirgunSettings
class airgun.settings.SatelliteSettings
class airgun.settings.SeleniumSettings
class airgun.settings.WebKaifukuSettings
class airgun.settings.Settings
_configure_logging()
_configure_thirdparty_logging()
configure(settings=None)

Parses arg settings or settings file if None passed and sets class attributes accordingly

airgun.utils
Module Contents
Functions

merge_dict(values, new_values)

Update dict values with new values from new_values dict

normalize_dict_values(values)

Transform a widget path:value dict to a regular View read values format.

get_widget_by_name(widget_root, widget_name)

Return a widget by it's name from widget_root, where widget can be a sub widget.

retry_navigation(method)

Decorator to invoke method one or more times, if TimedOutError is raised.

airgun.utils.merge_dict(values, new_values)

Update dict values with new values from new_values dict

Merge example:

a = {‘a’: {‘c’: {‘k’: 2, ‘x’: {1: 0}}}} b = {‘a’: {‘c’: {‘z’: 5, ‘y’: 40, ‘x’: {2: 1}}}, ‘b’: {‘a’: 1, ‘l’: 2}} update_dict(a, b) # a updated and equal: # {‘a’: {‘c’: {‘k’: 2, ‘x’: {1: 0, 2: 1}, ‘z’: 5, ‘y’: 40}}, ‘b’: {‘a’: 1, ‘l’: 2}}

airgun.utils.normalize_dict_values(values)

Transform a widget path:value dict to a regular View read values format.

This function transform a dictionary from:

{‘a.b’: 1, ‘a.z’: 10, ‘a.c.k’: 2, ‘a.c.z’: 5, ‘x.y’: 3, ‘c’: 4}

to:

{‘a’: {‘b’: 1, ‘z’: 10, ‘c’: {‘k’: 2, ‘z’: 5}}, ‘x’: {‘y’: 3}, ‘c’: 4}

airgun.utils.get_widget_by_name(widget_root, widget_name)

Return a widget by it’s name from widget_root, where widget can be a sub widget.

Parameters
  • widget_root – The root Widget instance from where to begin resolving widget_name.

  • widget_name – a string representation of the widget instance to find.

Example

widget_name = ‘details’ or widget_name = ‘details.subscription_status’ or widget_name = ‘details.subscriptions.resources’

airgun.utils.retry_navigation(method)

Decorator to invoke method one or more times, if TimedOutError is raised.

airgun.widgets
Module Contents
Classes

SatSelect

Represent basic select element except our custom implementation remove

CheckboxWithAlert

Represent basic checkbox element, but able to handle alert message

RadioGroup

Classical radio buttons group widget

ToggleRadioGroup

Toggle buttons group widget when each button represented by radio

DateTime

Collection of date picker and two inputs for hours and minutes

DatePickerInput

Input for date, which opens calendar on click.

ItemsList

List with click-able elements. Part of MultiSelect or jQuery

AddRemoveItemsList

Similar to ItemsList widget except list elements can be selected only using 'Add'

ItemsListGroup

Similar to ItemsList widget ideology, but here we have group of items lists instead.

ItemsListReadOnly

List with click-able elements. Part of MultiSelect or jQuery

MultiSelect

Typical two-pane multiselect jQuery widget. Allows to move items from

PuppetClassesMultiSelect

Widget has different appearance than MultiSelect, because there are no actual panes,

ConfigGroupMultiSelect

Similar to the PuppetClassesMultiSelect widget except items lists has different

ActionsDropdown

List of actions, expandable via button with caret. Usually comes with

Pf4ActionsDropdown

PF4 version of actions dropdown with support for items description

ActionDropdownWithCheckbox

Custom drop down which contains the checkbox inside in drop down.

Search

Searchbar for table filtering

PF4Search

PF4 Searchbar for table filtering

SatVerticalNavigation

The Patternfly Vertical navigation.

SatFlashMessage

Satellite version of Patternfly alert. It doesn't contain <strong>

SatFlashMessages

Satellite version of Patternfly's alerts section. The only difference is

ValidationErrors

Widget for tracking all improperly filled inputs inside view, which are

ContextSelector

Base class for all UI objects.

FilteredDropdown

Drop-down element with filtering functionality

CustomParameter

Name-Value paired input elements which can be added, edited or removed.

ConfirmationDialog

Usual confirmation dialog with two buttons and close 'x' button in the

Pf4ConfirmationDialog

PF4 confirmation dialog with two buttons and close 'x' button in the

LCESelector

Group of checkboxes that goes in a line one after another. Usually used

LimitInput

Input for managing limits (e.g. Hosts limit). Consists of 'Unlimited'

TextInputHidden

Text input widget with content that may be hidden

EditableEntry

Usually represented by static field and edit button that transform

EditableEntrySelect

Should be used in case EditableEntry widget represented not by

EditableEntryCheckbox

Should be used in case EditableEntry widget represented not by

CheckboxGroup

A set of checkboxes of the same property type

EditableEntryMultiCheckbox

Should be used in case EditableEntry widget represented not by

TextInputsGroup

A set of text inputs

EditableLimitEntry

Should be used in case EditableEntry widget represented not by

EditableDateTime

Should be used in case EditableEntry widget represented not by

ReadOnlyEntry

Similar to EditableEntry and specific for the same page types, but cannot

ACEEditor

Default ace editor

Pagination

Represents Paginator widget that includes per page selector, First/Last/Next/Prev buttons

SatTablePagination

Paginator widget for use within SatTable.

SatTable

Satellite version of table.

SatSubscriptionsTable

Subscriptions table, which has extra preceding row for 'Repository Name'

SatTableWithoutHeaders

Applicable for every table in application that has no headers. Due logic of the Table

SatTableWithUnevenStructure

Applicable for every table in application that has uneven amount of

ProgressBar

Generic progress bar widget.

PublishPromoteProgressBar

Progress bar for Publish and Promote procedures. They contain status

PieChart

Default Pie Chart that can be found across application. At that moment

RemovableWidgetsItemsListView

A host for widgets list. Items that can be added or removed, mainly used in profile for

GenericRemovableWidgetItem

Generic Item widget (to be inherited) and to be used as Widget Item for

AutoCompleteTextInput

Autocomplete Search input field, We must remove the focus from this widget after fill to

ToggleButton

A simple toggle button that we can read/write it's state via the standard view functions

Link

A link representation that we can read/click via the standard view functions read/fill.

PopOverModalView

Popover-content UI widget which contains header, drop_down, input_box, or textarea and

PopOverWidget

Popover-content UI widget which contains header, drop_down, input_box, or textarea and

AuthSourceAggregateCard

This is a customizable card widget which has the title, count and kebab widget

Accordion

PF4 Accordion widget

BaseMultiSelect

Represents the Patternfly Multi Select.

InventoryBootstrapSwitch

Checkbox-like Switch control, representing On and Off state. But with

class airgun.widgets.SatSelect(parent, locator=None, id=None, name=None, logger=None)

Represent basic select element except our custom implementation remove html tags from select option values

SELECTED_OPTIONS_TEXT = Multiline-String
Show Value
1var result_arr = [];
2var opt_elements = arguments[0].selectedOptions;
3for(var i = 0; i < opt_elements.length; i++){
4    value = opt_elements[i].innerHTML;
5    parsed_value = value.replace(/<[^>]+>/gm, '');
6    result_arr.push(parsed_value);
7}
8return result_arr;
class airgun.widgets.CheckboxWithAlert(parent, name=None, id=None, locator=None, logger=None)

Represent basic checkbox element, but able to handle alert message which can appear after you perform action for that widget

fill(value)

Interactive objects like inputs, selects, checkboxes, et cetera should implement fill.

When you implement this method, it MUST ALWAYS return a boolean whether the value was changed. Otherwise it can break.

For actual filling, please use fill_with(). It offers richer interface for filling.

Returns

A boolean whether it changed the value or not.

class airgun.widgets.RadioGroup(parent, locator, logger=None)

Classical radio buttons group widget

Example html representation:

<div class="form-group ">
    <label>Protocol *</label>
<div class="col-md-4">
    <label class="radio-inline">
        <input type="radio" checked="checked" name="subnet[type]">IPv4
    </label>
    <label class="radio-inline">
        <input type="radio" name="subnet[type]">IPv6
    </label>

Locator example:

//div/label[input[@type='radio']][contains(., 'IPv4')]
LABELS = .//label[input[@type="radio"]]
BUTTON = .//input[@type="radio"]
property button_names

Return all radio group labels

_get_parent_label(name)

Get radio group label for specific button

property selected

Return name of a button that is currently selected in the group

select(name)

Select specific radio button in the group

read()

Wrap method according to architecture

fill(name)

Wrap method according to architecture

class airgun.widgets.ToggleRadioGroup(parent, locator, logger=None)

Toggle buttons group widget when each button represented by radio element

Example html representation:

<div class="form-group ">
    <div>
        <label>Template *</label>
    <div class="btn-group">
        <label class="btn btn-default btn-sm active">
           <input type="radio" name="options">Input
        </label>
        <label class="btn btn-default btn-sm">
           <input type="radio" name="options">Diff
        </label>

Locator example:

//div[@class='btn-group']
property selected

Return name of a button that is currently selected in the group

select(name)

Select specific radio button in the group

class airgun.widgets.DateTime(parent, logger=None, **kwargs)

Collection of date picker and two inputs for hours and minutes

Example html representation:

<div name="syncPlanForm">
    <div ... label="Start Date">
        <label for="startDate" class="ng-binding">Start Date</label>
        <input type="text" uib-datepicker-popup="" id="startDate" ...>
        <span class="input-group-btn">
            <button type="button" class="btn btn-default"...>
                <i class="fa fa-calendar"></i>
    <div ...label="Start Time">
        <label for="" class="ng-binding">Start Time</label>
            <div show-meridian="false" id="startTime" ...>
                <table...>
...

Locator example:

We don't need to pass locator here as widget seems has one structure
across all applications that use paternfly pattern
start_date
hours
minutes
fill(values)

Fills the widget accordingly to provided values.

Parameters

values – dict with keys start_date and/or hours, and/or minutes containing values that should be present in the fields

read()

Read current widget values and put them into the dict

Parameters

values – dict with key/value pairs for all widget fields

class airgun.widgets.DatePickerInput(parent, name=None, id=None, locator=None, logger=None)

Input for date, which opens calendar on click.

Example html representation:

<input type="date" uib-datepicker-popup="" ng-model="rule.start_date"
 ng-model-options="{timezone: 'UTC'}" is-open="date.startOpen"
 ng-click="openStartDate($event)">
    <div uib-datepicker-popup-wrap="" ng-model="date"
     ng-change="dateSelection(date)"
     template-url="uib/template/datepickerPopup/popup.html">
        <ul role="presentation" class="uib-datepicker-popup ..."
         ng-if="isOpen" ng-keydown="keydown($event)"
         ng-click="$event.stopPropagation()">
        ...
    </div>
    <span class="input-group-btn">
            <button class="btn btn-default" type="button"
             ng-click="openStartDate($event)">
                <i class="fa fa-calendar inline-icon"></i>
        </button>
    </span>

Locator example:

".//input[@ng-model='rule.start_date']"
CALENDAR_POPUP = ./parent::div/div[@ng-model='date']/ul[contains(@class, 'datepicker-popup')]
calendar_button
clear_button
done_button
property is_open

Bool value whether the calendar is opened or not

clear()

Clear input value. Opens calendar popup if it’s closed and pushes ‘Clear’ button.

close_calendar()

Closes calendar popup if it’s opened.

fill(value)

Custom fill which uses custom clear() and closes calendar popup after filling.

class airgun.widgets.ItemsList(parent, locator, logger=None)

List with click-able elements. Part of MultiSelect or jQuery drop-down.

Example html representation:

<ul class="ms-list" tabindex="-1">

Locator example:

//ul[@class='ms-list']
ITEM = ./li[not(contains(@style, 'display: none'))][normalize-space(.)='{}']
ITEMS = ./li[not(contains(@style, 'display: none'))]
read()

Return a list of strings representing elements in the ItemsList.

fill(value)

Clicks on element inside the list.

Parameters

value – string with element name

class airgun.widgets.AddRemoveItemsList(parent, locator, logger=None)

Similar to ItemsList widget except list elements can be selected only using ‘Add’ and ‘Remove’ buttons near each of it

Example html representation:

<ul class="config_group_group">
    <li id="config_group_1" class="config_group ">
        <span>
            <a onclick="expandClassList...">
        </span>
        <a onclick="addConfigGroup(this)">Add</a>
    </li>
</ul>

Locator example:

//ul[@id='selected_config_groups']
ITEM_BUTTON = ./li[not(contains(@style, 'display: none'))][contains(., '{}')]/a
ITEMS = ./li[not(contains(@style, 'display: none'))]/span/a
read()

Return a list of strings representing elements in the AddRemoveItemsList.

fill(value)

Clicks on whether Add or Remove button for necessary element from the list.

Parameters

value – string with element name

class airgun.widgets.ItemsListGroup(parent, locator, logger=None)

Similar to ItemsList widget ideology, but here we have group of items lists instead. Each item list element from such group is placed inside expandable section

Example html representation:

<ul class="puppetclass_group">
    <li>
        <a onclick="expandClassList...">
            stdlib
        </a>
        <ul id="pc_stdlib">
            <li class="puppetclass">
                <span>
                    <a...>stdlib</a>
                </span>

            </li>
            <li class="puppetclass ">
                <span>
                    <a...>stdlib::stages</a>
                </span>
        </li>
    </li>
</ul>

Locator example:

//div[contains(@class, 'available_classes')]/div[@class='row']
ITEM = ./div/ul/li/ul/li[not(contains(@style, 'display: none'))][normalize-space(.)='{}']/span/a
ITEMS = ./div/ul/li/ul/li[not(contains(@style, 'display: none'))]
EXPAND = ./div/ul/li/ul/li[not(contains(@style, 'display:...
read()

Each object should implement read so it is easy to get the value of such object.

When you implement this method, the exact return value is up to you but it MUST be consistent with what fill() takes.

fill(value)

Interactive objects like inputs, selects, checkboxes, et cetera should implement fill.

When you implement this method, it MUST ALWAYS return a boolean whether the value was changed. Otherwise it can break.

For actual filling, please use fill_with(). It offers richer interface for filling.

Returns

A boolean whether it changed the value or not.

class airgun.widgets.ItemsListReadOnly(parent, locator, logger=None)

List with click-able elements. Part of MultiSelect or jQuery drop-down.

Example html representation:

<ul class="ms-list" tabindex="-1">

Locator example:

//ul[@class='ms-list']
fill(value)

Clicks on element inside the list.

Parameters

value – string with element name

class airgun.widgets.MultiSelect(parent, locator=None, id=None, logger=None)

Typical two-pane multiselect jQuery widget. Allows to move items from list of unassigned entities to list of assigned ones and vice versa.

Examples on UI:

Hosts -> Architectures -> any -> Operating Systems
Hosts -> Operating Systems -> any -> Architectures

Example html representation:

<div class="ms-container" id="ms-operatingsystem_architecture_ids">

Locator examples:

//div[@id='ms-operatingsystem_architecture_ids']
id='ms-operatingsystem_architecture_ids'
filter
unassigned
assigned
fill(values)

Read current values, find the difference between current and passed ones and fills the widget accordingly.

Parameters

values – dict with keys assigned and/or unassigned, containing list of strings, representing item names

read()

Returns a dict with current lists values.

class airgun.widgets.PuppetClassesMultiSelect(parent, locator=None, id=None, logger=None)

Widget has different appearance than MultiSelect, because there are no actual panes, but logically it is the same. It looks like two lists of items and specific for puppet classes functionality. Allows to move items from list of ‘available’ entities to list of ‘included’ ones and vice versa. Named these lists as ‘assigned’ and ‘unassigned’ for proper inheritance.

Examples on UI::

Hosts -> Create Host -> Puppet Classes Configure -> Config Groups

Example html representation:

<div class="row">
    <div>
        <h3>Included Classes</h3>
        <ul id="selected_classes">
        </ul>
    </div>

    <div>
         <h3>Available Classes</h3>
         <ul class="puppetclass_group">
         </ul>
    </div>
</div>
Locator examples::

Usually it is empty locator, because it is impossible to build relative path

filter
assigned
unassigned
class airgun.widgets.ConfigGroupMultiSelect(parent, locator=None, id=None, logger=None)

Similar to the PuppetClassesMultiSelect widget except items lists has different appearance and there is no filter field for available classes. Usually specific for config group functionality.

filter
assigned
unassigned
class airgun.widgets.ActionsDropdown(parent, locator, logger=None)

List of actions, expandable via button with caret. Usually comes with button attached on left side, representing either most common action or hint like ‘Select Action’.

Example html representation:

<div class="btn-group dropdown" is-open="status.isOpen">
  <button type="button" class="btn btn-default" ...>
    <span><span >Select Action</span></span>
  </button>
  <button type="button" class="btn btn-default" ...>
    <span class="caret"></span>
  </button>
  <ul class="dropdown-menu dropdown-menu-right ng-scope" role="menu">
    <li role="menuitem"><a><span><span>Action1</span></span></a></li>
    <li role="menuitem"><a><span><span>Action2</span></span></a></li>
  </ul>
</div>

Locator example:

//div[contains(@class, 'dropdown')]
//div[contains(@class, 'btn-group')]
dropdown
pf4_drop_down
button
ITEMS_LOCATOR = .//ul/li/a
ITEM_LOCATOR = .//ul/li/a[normalize-space(.)="{}"]
property is_open

Checks whether dropdown list is open.

open()

Opens dropdown list

close()

Closes dropdown list

property items

Returns a list of all dropdown items as strings.

select(item)

Selects item from dropdown.

fill(item)

Selects action. Apart from dropdown also checks attached button label if present

read()

Returns a list of available actions.

class airgun.widgets.Pf4ActionsDropdown(parent, locator, logger=None)

PF4 version of actions dropdown with support for items description

Example html representation:

<div class="pf-c-dropdown pf-m-expanded" data-ouia-component-type="PF4/Dropdown">
  <div class="pf-c-dropdown__toggle pf-m-split-button pf-m-action">
      <button class="pf-c-dropdown__toggle-button">Schedule a job</button>
      <button class="pf-c-dropdown__toggle-button pf-m-secondary">
      </button>
  </div>
  <ul class="pf-c-dropdown__menu" role="menu">
      <li "role="menuitem"><a><div>Run Puppet Once</div></a></li>
      <li "role="menuitem"><a><div>Run OpenSCAP scan</div></a></li>
      <li "role="menuitem"><a><div>Run Ansible roles</div></a></li>
      <li "role="menuitem"><a><div>Enable web console</div></a></li>
  </ul>
</div>
button
dropdown
ITEMS_LOCATOR = .//ul[contains(@class, 'pf-c-dropdown__menu')]/li
ITEM_LOCATOR = .//ul/li[@role='menuitem' and contains(normalize-space(.), '{}')]
property is_open

Checks whether dropdown list is open.

property is_enabled

Check widget is enabled or not.

The logic behind is_enabled is WebElement property. If __locator__ not pointing to the expected WebElement, you can always override this.

Returns

bool

select(item)

Selects item from dropdown.

class airgun.widgets.ActionDropdownWithCheckbox(parent, locator, logger=None)

Custom drop down which contains the checkbox inside in drop down.

customize_check_box
fill(item)

select action from drop down list, after checking customize checkbox :param item: dictionary with values for ‘is_customize’ and ‘action’ keys.

class airgun.widgets.Search(parent, logger=None, **kwargs)

Searchbar for table filtering

ROOT = //div[contains(@class, "toolbar-pf-filter") or contains(@class, "title_filter")or...
search_field
search_button
clear_button
actions
fill(value)

Interactive objects like inputs, selects, checkboxes, et cetera should implement fill.

When you implement this method, it MUST ALWAYS return a boolean whether the value was changed. Otherwise it can break.

For actual filling, please use fill_with(). It offers richer interface for filling.

Returns

A boolean whether it changed the value or not.

read()

Each object should implement read so it is easy to get the value of such object.

When you implement this method, the exact return value is up to you but it MUST be consistent with what fill() takes.

clear()

Clears search field value and re-trigger search to remove all filters.

search(value)
class airgun.widgets.PF4Search(parent, logger=None, **kwargs)

PF4 Searchbar for table filtering

ROOT = //div[@role="combobox" or @aria-haspopup="listbox"]
search_field
clear_button
clear()

Clears search field value and re-trigger search to remove all filters.

search(value)
class airgun.widgets.SatVerticalNavigation(parent, locator, logger=None)

The Patternfly Vertical navigation.

CURRENTLY_SELECTED = .//li[contains(@class, "active")]/a/span
class airgun.widgets.SatFlashMessage(parent, logger=None, **kwargs)

Satellite version of Patternfly alert. It doesn’t contain <strong> tag and all the text is inside 2 <span>.

For more details, see Bugzilla #1566565.

Should not be used directly, only via class:SatFlashMessages.

Example html representation:

<div class="alert toast-pf alert-success alert-dismissable">
        <button ... type="button" class="close close-default">
            <span ... class="pficon pficon-close"></span></button>
        <span aria-hidden="true" class="pficon pficon-ok"></span>
        <span><span>Sample message</span></span></div>
</div>
TYPE_MAPPING
ROOT
TITLE_LOCATOR = .//h4[contains(@class, "alert__title")]
DISMISS_LOCATOR = .//div[contains(@class, "alert__action")]
ICON_LOCATOR = .//div[contains(@class, "alert__icon")]
DESCRIPTION_LOCATOR = .//div[contains(@class, "alert__description")]
property text

Return the message text of the notification.

class airgun.widgets.SatFlashMessages(parent, logger=None, **kwargs)

Satellite version of Patternfly’s alerts section. The only difference is overridden messages property which returns SatFlashMessage.

Example html representation:

<ul class="pf-c-alert-group pf-m-toast"><li>
<div class="pf-c-alert pf-m-success foreman-toast" aria-label="Success Alert"
    data-ouia-component-type="PF4/Alert" data-ouia-safe="true"
    data-ouia-component-id="OUIA-Generated-Alert-success-1">
    <div class="pf-c-alert__icon">

Locator example:

//ul[@class="pf-c-alert-group pf-m-toast"]/li/div[contains(@class, "pf-c-alert")]
ROOT = //ul[@class="pf-c-alert-group pf-m-toast"]
MSG_LOCATOR
msg_class
class airgun.widgets.ValidationErrors(parent, logger=None, **kwargs)

Widget for tracking all improperly filled inputs inside view, which are highlighted with red color and typically contain error message next to them.

Example html representation:

<div class="form-group has-error">
    <label class="..." for="name">DNS Domain *</label>
    <div class="col-md-4">
        <input ... type="text" name="domain[name]" id="domain_name">
        <span class="help-block"></span>
    </div>
    <span class="help-block help-inline">
        <span class="error-message">can't be blank</span>
    </span>
</div>

Locator example:

No locator accepted as widget should look through entire view.
ERROR_ELEMENTS = .//*[contains(@class,'has-error') and not(contains(@style,'display:none'))]
ERROR_MESSAGES = .//*[(contains(@class, 'alert base in fade alert-danger')or contains(@class,'error-msg-block')or...
property has_errors

Returns boolean value whether view has fields with invalid data or not.

property messages

Returns a list of all validation messages for improperly filled fields. Example: [“can’t be blank”]

assert_no_errors()

Assert current view has no validation messages, otherwise rise AssertionError.

read(*args, **kwargs)

Each object should implement read so it is easy to get the value of such object.

When you implement this method, the exact return value is up to you but it MUST be consistent with what fill() takes.

class airgun.widgets.ContextSelector(parent, logger=None, **kwargs)

Base class for all UI objects.

Does couple of things:

  • Ensures it gets instantiated with a browser or another widget as parent. If you create an instance in a class, it then creates a WidgetDescriptor which is then invoked on the instance and instantiates the widget with underlying browser.

  • Implements some basic interface for all widgets.

If you are inheriting from this class, you MUST ALWAYS ensure that the inherited class has an init that always takes the parent as the first argument. You can do that on your own, setting the parent as self.parent or you can do something like this:

def __init__(self, parent, arg1, arg2, logger=None):
    super(MyClass, self).__init__(parent, logger=logger)
    # or if you have somehow complex inheritance ...
    Widget.__init__(self, parent, logger=logger)
CURRENT_ORG
CURRENT_LOC
ORG_LOCATOR = //div[@id="organization-dropdown"]//li[button[contains(.,{})]]
LOC_LOCATOR = //div[@id="location-dropdown"]//li[button[contains(.,{})]]
select_org(org_name)
property current_org
select_loc(loc_name)
property current_loc
read()

As reading organization and location is not atomic operation: needs mouse moves, clicks, etc, and this widget is included in every view - calling airgun.views.common.BaseLoggedInView.read() for any view will trigger reading values of ContextSelector. Thus, to avoid significant performance degradation it should not be readable.

Use current_org() and current_loc() instead.

class airgun.widgets.FilteredDropdown(parent, id=None, locator=None, logger=None)

Drop-down element with filtering functionality

Example html representation:

<div class="select2-container form-control" id="s2id_subnet_boot_mode">

Locator example:

id=subnet_boot_mode
id=s2id_subnet_ipam
selected_value
open_filter
clear_filter
filter_criteria
filter_content
read()

Return drop-down selected item value

clear()

Clear currently selected value for drop-down

fill(value)

Select specific item from the drop-down

Parameters

value – string with item value

class airgun.widgets.CustomParameter(parent, **kwargs)

Name-Value paired input elements which can be added, edited or removed.

It is essentially a table with text input widgets on each row, with an “Add New Parameter” button on the same page.

Example html representation:

<table class="table" id="global_parameters_table">
    <tr class="fields " id="new_os_parameter_row">
        <input placeholder="Name" type="text" ... id="..._name">
        <textarea id="new_os_parameter_value" placeholder="Value" ...>

Locator example:

//input[@placeholder='Name']
//textarea[@placeholder='Value']
add_new_value
read()

Return a list of dictionaries. Each dictionary consists of name and value parameters

add(value)

Add single name/value parameter entry to the table.

Parameters

value – dict with format {‘name’: str, ‘value’: str}

remove(name)

Remove parameter entries from the table based on name.

Parameters

value – dict with format {‘name’: str, ‘value’: str}

fill(values)

Fill parameter entries. Existing values will be overwritten.

Updates name/value pairs if the name is already in the list.

If you desire to intentionally add a duplicate value, use self.add()

Parameters

values – either single dictionary of name and value, or list of name/value dictionaries

class airgun.widgets.ConfirmationDialog(parent, logger=None, **kwargs)

Usual confirmation dialog with two buttons and close ‘x’ button in the right corner. Has nothing in common with javascript alert, confirm or prompt pop-ups.

Example html representation:

<div class="modal-content">
    <button type="button" class="close" ... ng-click="cancel()">
    <div class="modal-footer ng-scope">
        <button class="btn btn-danger" ng-click="ok()">
        <button class="btn ..." ng-click="cancel()"...>

Locator example:

//div[@class='modal-content']
ROOT = .//div[@class='modal-content']
confirm_dialog
cancel_dialog
discard_dialog
_check_is_displayed(elem)

This is to check if dialog is displayed

confirm()

Clicks on the positive outcome button like ‘Remove’, ‘Ok’, ‘Yes’

cancel()

Clicks on the negative outcome button like ‘Cancel’ or ‘No’

read()

Widgets has no fields to read

class airgun.widgets.Pf4ConfirmationDialog(parent, logger=None, **kwargs)

PF4 confirmation dialog with two buttons and close ‘x’ button in the right corner.

ROOT = //div[@id="app-confirm-modal" or @data-ouia-component-type="PF4/ModalContent"]
confirm_dialog
cancel_dialog
discard_dialog
class airgun.widgets.LCESelector(parent, locator=None, logger=None)

Group of checkboxes that goes in a line one after another. Usually used to specify lifecycle environment

Example html representation:

<ul[@class='path-list']>
    <li class="path-list-item ng-scope"...>
        <label class="path-list-item-label...>
            <input type="checkbox"...>
    <li class="path-list-item ng-scope"...>
        <label class="path-list-item-label...>
            <input type="checkbox"...>

Locator example:

//ul[@class='path-list']
ROOT
LABELS = ./li/label[contains(@class, path-list-item-label)]
CHECKBOX = .//input[@ng-model="item.selected"][parent::label[contains(., "{}")]]
checkbox_selected(locator)

Identify whether specific checkbox is selected or not

select(locator, value)

Select or deselect checkbox depends on the value passed

read()

Return a dictionary where keys are lifecycle environment names and values are booleans whether they’re selected or not.

fill(value)

Assign value for specific checkbox from group

Parameters

value – dictionary that consist of single checkbox name and value that should be assigned to that checkbox

class airgun.widgets.LimitInput(parent, logger=None, **kwargs)

Input for managing limits (e.g. Hosts limit). Consists of ‘Unlimited’ checkbox and text input for specifying the limit, which is only visible if checkbox is unchecked.

Example html representation:

<input type="checkbox" name="limit"
 ng-model="activationKey.unlimited_hosts"...>

<input id="max_hosts" name="max_hosts"
 ng-model="activationKey.max_hosts"
 ng-required="!activationKey.unlimited_hosts" type="number" min="1"
 max="2147483648"...>

Locator example:

No locator accepted as widget consists of multiple other widgets in
different parts of DOM. Please use View's ``ROOT`` for proper isolation
if needed.
unlimited
limit
fill(value)

Handle ‘Unlimited’ checkbox before trying to fill text input.

Parameters

value – either ‘Unlimited’ (case insensitive) to select corresponding checkbox or value to fill text input with.

read()

Return either ‘Unlimited’ if corresponding checkbox is selected or text input value otherwise.

class airgun.widgets.TextInputHidden(parent, name=None, id=None, locator=None, logger=None)

Text input widget with content that may be hidden

read()

Each object should implement read so it is easy to get the value of such object.

When you implement this method, the exact return value is up to you but it MUST be consistent with what fill() takes.

class airgun.widgets.EditableEntry(parent, locator=None, name=None, logger=None)

Usually represented by static field and edit button that transform field into control to change field content to specific value. That control can have different appearances like textarea, input, select and etc. That widget is specific for entity edit pages.

Example html representation:

<dl>
    <dt>
    <dd>
        <form>
        ...
            <span class="fr" ng-hide="editMode || readonly"...>
            <span class="editable-value ng-binding">

Locator example:

//dt[contains(., 'test')]/following-sibling::dd/span
//dt[contains(., 'test')]/following-sibling::dd/input
edit_button
edit_field
save_button
cancel_button
entry_value
fill(value)

Fill widget with necessary value

Parameters

value – string with value that should be used for field update procedure

read()

Returns string with current widget value

class airgun.widgets.EditableEntrySelect(parent, locator=None, name=None, logger=None)

Should be used in case EditableEntry widget represented not by a field, but by select list.

edit_field
class airgun.widgets.EditableEntryCheckbox(parent, locator=None, name=None, logger=None)

Should be used in case EditableEntry widget represented not by a field, but by checkbox.

edit_field
class airgun.widgets.CheckboxGroup(parent, locator, logger=None)

A set of checkboxes of the same property type

ITEMS_LOCATOR = .//p
CHECKBOX_LOCATOR = .//p[normalize-space(.)="{}"]/input
checkboxes()
read()

Read values of checkboxes

fill(values)

Check or uncheck one of the checkboxes

Parameters

value – string with specification of fields’ values Example: value={‘details.addons’: {‘Test addon 1’: True, ‘Test addon 2’: False}}

class airgun.widgets.EditableEntryMultiCheckbox(parent, locator=None, name=None, logger=None)

Should be used in case EditableEntry widget represented not by a field, but by a set of checkboxes.

edit_field
class airgun.widgets.TextInputsGroup(parent, locator, logger=None)

A set of text inputs

FIELD_LABELS = .//div[contains(@id,"template-input-")]//label
TEXTINPUT_LOCATOR = .//div[contains(@id,"template-input-")]//label[normalize-space(.)="{}"]/following-sibling::div//input
labels()
textinputs()
read()

Read values of text inputs

fill(values)

Fill one of the text inputs

Parameters

value – string with specification of fields’ values Example: value={‘Hosts filter’: ‘name=host11.example.com’, ‘Errata filter’: ‘whatever’}

class airgun.widgets.EditableLimitEntry(parent, locator=None, name=None, logger=None)

Should be used in case EditableEntry widget represented not by a field, but by LimitInput widget.

edit_field
class airgun.widgets.EditableDateTime(parent, locator=None, name=None, logger=None)

Should be used in case EditableEntry widget represented not by a field, but by DateTime widget.

edit_field
class airgun.widgets.ReadOnlyEntry(parent, locator=None, name=None, logger=None)

Similar to EditableEntry and specific for the same page types, but cannot be modified.

Example html representation:

<dl>
    <dt>
    <dd>
        <form>
        ...
            <span class="ng-scope">No</span>

Locator example:

//dt[contains(., 'test')]/following-sibling::dd
//dt[contains(., 'test')]/following-sibling::dd/span
entry_value
BASE_LOCATOR = .//dt[contains(., '{}')]/following-sibling::dd[not(contains(@class, 'ng-hide'))][1]
read()

Returns string with current widget value

class airgun.widgets.ACEEditor(parent, logger=None)

Default ace editor

Example html representation:

<div id="editor-000" class="editor ace_editor ace-twilight ace_dark">
    <textarea class="ace_text-input"
    <div class="ace_gutter" style="display: none;">
        <div class="ace_layer ace_gutter-layer ace_folding-enabled">
    <div class="ace_scroller">
    <div class="ace_content">
        ...

Locator example:

There is no need to provide any locators to that widget
ROOT = //div[contains(@class, 'ace_editor')]
fill(value)

Fill widget with necessary value

Parameters

value – string with value that should be used for field update procedure

read()

Returns string with current widget value

class airgun.widgets.Pagination(parent, logger=None, **kwargs)

Represents Paginator widget that includes per page selector, First/Last/Next/Prev buttons and current page index/overall amount of pages. Mainly used with Table widget.

ROOT = .//form[contains(@class, 'content-view-pf-pagination')]
PER_PAGE_BUTTON_DROPDOWN = .//div[button[@id='pagination-row-dropdown']]
PER_PAGE_SELECT = .//select[contains(@ng-model, 'per_page')]
first_page_button
previous_page_button
next_page_button
last_page_button
page
pages
total_items
per_page()

Return the per page widget

property is_displayed

Check whether this Pagination widget exists and visible

_click_button(pager_button)

Click on the pager button if enabled.

first_page()

Goto first page by clicking on first page button

previous_page()

Goto previous page by clicking on previous page button

next_page()

Goto next page by clicking on next page button

last_page()

Goto last page by clicking on last page button

property current_page

Return the current page as integer value

property total_pages

Return the total available pages as integer value

read()

Read the basic sub widgets of this pagination widget

fill(values)

Fill sub widgets with the supplied values

class airgun.widgets.SatTablePagination(parent, logger=None, **kwargs)

Paginator widget for use within SatTable.

ROOT = //form[contains(@class, 'content-view-pf-pagination')]
class airgun.widgets.SatTable(parent, locator, column_widgets=None, assoc_column=None, rows_ignore_top=None, rows_ignore_bottom=None, top_ignore_fill=False, bottom_ignore_fill=False, logger=None)

Satellite version of table.

Includes a paginator sub-widget. If found, then the paginator is used to read all entries from the table.

If the table is empty, there might be only one column with an appropriate message in the table body, or it may have no columns or rows at all. This subclass handles both possibilities.

Example html representation:

<table bst-table="table" ...>
   <thead>
     <tr class="ng-scope">
       <th class="row-select"><input type="checkbox" ...></th>
       <th ng-click="table.sortBy(column)" ...>
        <span ...><span ...>Column Name</span></span><i ...></i></th>
       <th ng-click="table.sortBy(column)" ...>
        <span ...><span ...>Column Name</span></span><i ...></i></th>
     </tr>
   </thead>
   <tbody>
    <tr id="noRowsTr"><td colspan="9">
         <span data-block="no-rows-message" ...>
            <span class="ng-scope">Table is empty</span></span>
    </td></tr>
   </tbody>
 </table>

Locator example:

.//table
no_rows_message = .//td/span[contains(@data-block, 'no-rows-message') or contains(@data-block,...
tbody_row
pagination
property has_rows

Boolean value whether table contains some elements (rows) or is empty.

read()

Return empty list in case table is empty

_read_all()

Return all available table values with using pagination navigation.

class airgun.widgets.SatSubscriptionsTable(parent, locator, column_widgets=None, assoc_column=None, rows_ignore_top=None, rows_ignore_bottom=None, top_ignore_fill=False, bottom_ignore_fill=False, logger=None)

Subscriptions table, which has extra preceding row for ‘Repository Name’ column. It’s equal to satellite table in all other respects.

Example:

Following table cells:

TestSubscriptionName
1|0 out of Unlimited|Physical|Start_Date|End_Date|Support_Level
TestSubscriptionName2
1|0 out of Unlimited|Physical|Start_Date|End_Date|Support_Level

Will be transformed into:

TestSubscriptionName|1|0 out of Unlimited|Physical|Start_Date|...
TestSubscriptionName2|1|0 out of Unlimited|Physical|Start_Date|...

So, title rows will be removed in favor of extra column 'Repository
Name'.

Example html representation:

<table bst-table="table" ...>
 ...
 <tbody>
    <!-- ngRepeat: (name, subscriptions) in groupedSubscriptions -->
    ...
 </tbody>
</table>

Locator example:

.//table
title_rows
rows(*extra_filters, **filters)

Split list of all the rows into ‘content’ rows and ‘title’ rows. Return content rows only.

read()

Return content rows with 1 extra column ‘Repository Name’ in it.

class airgun.widgets.SatTableWithoutHeaders(parent, locator, column_widgets=None, assoc_column=None, rows_ignore_top=None, rows_ignore_bottom=None, top_ignore_fill=False, bottom_ignore_fill=False, logger=None)

Applicable for every table in application that has no headers. Due logic of the Table widget we have to explicitly specify custom headers. As we have no idea about the content and structure of the table in advance, we will dynamically name each column using simple - ‘column1’, ‘column2’, … ‘columnN’.

Example html representation:

<table>
    <tbody>
        <tr>
            <td>Name</td>
            <td>my_host</td>
            <td>my_new_host</td>
        </tr>
        <tr>
            <td>Arhitecture</td>
            <td>x32</td>
            <td>x64</td>
        </tr>
    </tbody>
</table>

Locator example:

//table[@id='audit_table']
ROWS = ./tbody/tr
COLUMNS = ./tbody/tr[1]/td
ROW_AT_INDEX = ./tbody/tr[{0}]
HEADER_IN_ROWS
HEADERS
property _is_header_in_body

Explicitly return False as there is no header row in this table.

headers()
class airgun.widgets.SatTableWithUnevenStructure(parent, locator, column_locator='.', logger=None)

Applicable for every table in application that has uneven amount of headers and columns(usually we talk about 1 header but 2 columns) We taking into account that all possible content rows are actually present in DOM, but some are ‘hidden’ using css class. Also we can specify what widget we expect in a second column (e.g. link or text)

Some examples where we can use current class: ‘Content Counts’ table present in every repository, containing amount of packages/source RPM’s/Errata/etc with links to corresponding details pages. ‘Properties’ table present in every host details page

Example html representation:

<table class="table table-striped table-bordered">
    <thead>
    <tr>
      <th colspan="2" ...>Content Type</th>
    </tr>
    </thead>

    <tbody>
    <tr ng-show="repository.content_type === 'yum'" class="ng-hide" style="">
      <!-- translate: --><td translate="" class="ng-scope" style="">Packages</td>
      <td class="align-center">
        <a ui-sref="product.repository.manage-content.packages(...)" class="ng-binding"
          href=".../repositories/<repo-id>/content/packages">
          0
        </a>
      </td>
    </tr>

    ...

    <tr ng-show="repository.content_type === 'docker'">
      <!-- translate: -->
        <td translate="" class="ng-scope" style="">Container Image Manifests</td>
      <td class="align-center">
        <a ui-sref="product.repository.manage-content.docker-manifests(...)"
          class="ng-binding"
          href=".../repositories/<repo-id>/content/content/docker_manifests">
          0
        </a>
      </td>
    </tr>
    ...
    </tbody>
</table>

Locator example:

.//table[//th[normalize-space(.)="Content Type"]]
//table[@id='properties_table']
read()

Returns a dict with {column1: column2} values, and only for rows which aren’t marked as hidden.

Example:

{
    'Packages': '1',
    'Package Groups': '0'
    'Status': 'OK'
    'Domain': 'domain_name'
}
class airgun.widgets.ProgressBar(parent, locator=None, logger=None)

Generic progress bar widget.

Example html representation:

<div class="progress ng-isolate-scope" type="success" ...>
  <div class="progress-bar progress-bar-success" aria-valuenow="0"
   aria-valuemin="0" aria-valuemax="100" aria-valuetext="0%" ...></div>
</div>

Locator example:

.//div[contains(@class, "progress progress-striped")]
PROGRESSBAR = .//div[contains(@class,"progress-bar")]
property is_active

Boolean value whether progress bar is active or not (stopped, pending or any other state).

property progress

String value with current flow rate in percent.

property is_completed

Boolean value whether progress bar is finished or not

wait_for_result(timeout=600, delay=1)

Waits for progress bar to finish. By default checks whether progress bar is completed every second for 10 minutes.

Parameters
  • timeout – integer value for timeout in seconds

  • delay – float value for delay between attempts in seconds

read()

Returns current progress.

class airgun.widgets.PublishPromoteProgressBar(parent, locator=None, logger=None)

Progress bar for Publish and Promote procedures. They contain status message and link to associated task. Also the progress is displayed slightly differently.

Example html representation:

<a ng-href="/foreman_tasks/tasks/71196" ng-hide="hideProgress(version)"
 href="/foreman_tasks/tasks/...71196">

  <div ng-class="{ active: taskInProgress(version) }"
   class="progress progress-striped">
    <div class="progress ng-isolate-scope" animate="false" ...>
    <div class="progress-bar" aria-valuenow="" aria-valuemin="0"
     aria-valuemax="100" aria-valuetext="%" ...></div></div>
  </div>
  Publishing and promoting to 1 environment.
</a>
<span ng-show="hideProgress(version)" ...>
  Published
  (2018-05-07 18:10:14 +0300)
</span>

Locator example:

.//div[contains(@class, "progress progress-striped")]
ROOT = .
TASK
MESSAGE
property is_completed

Boolean value whether progress bar is finished or not

read()

Returns message with either progress or result, depending on its status.

class airgun.widgets.PieChart(parent, locator, logger=None)

Default Pie Chart that can be found across application. At that moment only return values that displayed inside of the chart

chart_title_text
chart_title_value
read()

Return dictionary that contains chart title name as key and chart value as its value

class airgun.widgets.RemovableWidgetsItemsListView(parent, logger=None, **kwargs)

A host for widgets list. Items that can be added or removed, mainly used in profile for network interfaces, storage and job template.

Usage:

@View.nested
class resources(RemovableWidgetsItemsListView):
    ROOT = "//fieldset[@id='storage_volumes']"
    ITEMS = "./div/div[contains(@class, 'removable-item')]"
    ITEM_WIDGET_CLASS = ComputeResourceRHVProfileStorageItem
ITEMS = ./div[contains(@class, 'removable-item')]
ITEM_WIDGET_CLASS
ITEM_REMOVE_BUTTON_ATTR = remove_button
add_item_button
_get_item_locator(index)

Return the item locator located at index position

get_item_at_index(index)

Return the item widget instance at index

add_item()

Add an item by pressing the add_item button and return the item instance

remove_item(item)

Remove item widget by clicking on it’s remove button

remove_item_at_index(index)

Remove item at index

property items_length
property items

Return all the items widget instances

clear()

Remove all items if item remove button attribute defined.

read()

Read all items

fill(values)

Fill all items. :param values: A list of values to fill the item widgets with.

class airgun.widgets.GenericRemovableWidgetItem(parent, locator, logger=None)

Generic Item widget (to be inherited) and to be used as Widget Item for RemovableWidgetsItemsListView.

remove_button
context
read()

Each object should implement read so it is easy to get the value of such object.

When you implement this method, the exact return value is up to you but it MUST be consistent with what fill() takes.

fill(values)

Interactive objects like inputs, selects, checkboxes, et cetera should implement fill.

When you implement this method, it MUST ALWAYS return a boolean whether the value was changed. Otherwise it can break.

For actual filling, please use fill_with(). It offers richer interface for filling.

Returns

A boolean whether it changed the value or not.

class airgun.widgets.AutoCompleteTextInput(parent, name=None, id=None, locator=None, logger=None)

Autocomplete Search input field, We must remove the focus from this widget after fill to force the auto-completion list to be hidden. Since this is a react component, calling browser clear method directly on the field has no effect, thus we need to clear the field using the clear button attached to the input

clear_button
clear()

Clears search field value and re-trigger search to remove all filters.

fill(value)

Interactive objects like inputs, selects, checkboxes, et cetera should implement fill.

When you implement this method, it MUST ALWAYS return a boolean whether the value was changed. Otherwise it can break.

For actual filling, please use fill_with(). It offers richer interface for filling.

Returns

A boolean whether it changed the value or not.

class airgun.widgets.ToggleButton(parent, *text, locator=None, **kwargs)

A simple toggle button that we can read/write it’s state via the standard view functions read/fill

__locator__()
fill(value)

Interactive objects like inputs, selects, checkboxes, et cetera should implement fill.

When you implement this method, it MUST ALWAYS return a boolean whether the value was changed. Otherwise it can break.

For actual filling, please use fill_with(). It offers richer interface for filling.

Returns

A boolean whether it changed the value or not.

read()

Widget.read override, use text

A link representation that we can read/click via the standard view functions read/fill.

fill(value)

Interactive objects like inputs, selects, checkboxes, et cetera should implement fill.

When you implement this method, it MUST ALWAYS return a boolean whether the value was changed. Otherwise it can break.

For actual filling, please use fill_with(). It offers richer interface for filling.

Returns

A boolean whether it changed the value or not.

class airgun.widgets.PopOverModalView(parent, logger=None, **kwargs)

Popover-content UI widget which contains header, drop_down, input_box, or textarea and submit button. This is associated within a table.

Example html representation:

<div class="modal-content" role="document">
    <h4 class="modal-title">Update value for Connect by IP setting</h4>
    <form class="form-horizontal well">
        <select name="value" class="form-control">
            <option value="true">Yes</option>
            <option value="false">No</option>
        <div class="form-actions">
            <button type="submit" class="btn btn-primary">

<div class="modal-content" role="document">
    <h4 class="modal-title">Update value for Administrator email address setting</h4>
    <form class="form-horizontal well">
        <input name="value" class="form-control" value="root@rhts.example.com">
        <div class="form-actions">
            <button type="submit" class="btn btn-primary">

Locator example:

//div[contains(@class,'modal-content')]
ROOT = //div[contains(@class,'modal-content')]
header
input_box
textarea
drop_down
submit
class airgun.widgets.PopOverWidget(parent, logger=None, **kwargs)

Popover-content UI widget which contains header, drop_down, input_box, or textarea and submit button. This is associated within a table.

Locator example:

//div[contains(@class, 'editable-open')]
ROOT = .
column_value
pop_over_view
fill(item)

Selects value from drop_down if exist otherwise write into input_box or textarea

read()

read column updated value

class airgun.widgets.AuthSourceAggregateCard(parent, name, locator=None, action_title=None, logger=None)

This is a customizable card widget which has the title, count and kebab widget

Example html representation:

<div class="card-pf-body">
    <div class="dropdown pull-right dropdown-kebab-pf">
        <ul class="dropdown-menu dropdown-menu-right" aria-labelledby="dropupKebabRight2">
            <li><a href="/auth_source_externals/3/edit">Edit</a></li>
        </ul>
    </div>
    <h2 class="card-pf-title text-center">
            External
    </h2>
    <div class="card-pf-items text-center">
        <div class="card-pf-item">
            <span class="pficon pficon-users"></span>
            <span class="card-pf-item-text"><a href="">10</a></span>
        </div>
    </div>
</div>
ROOT
select_kebab
COUNT = .//span[@class='card-pf-item-text']
property count

Count of sources :return int: None if no count element is found, otherwise count of sources in the card

class airgun.widgets.Accordion(parent=None, id=None, locator=None, logger=None)

PF4 Accordion widget

ROOT
ITEMS = .//button[contains(@class, 'pf-c-accordion__toggle')]
ITEM = .//span[contains(normalize-space(.), '{}')]
items()
toggle(value)
class airgun.widgets.BaseMultiSelect(parent: widgetastic.types.ViewParent, component_id: Optional[str] = None, logger: Optional[logging.Logger] = None, component_type: Optional[str] = None)

Represents the Patternfly Multi Select.

https://www.patternfly.org/v4/documentation/react/components/select#multiple

BUTTON_LOCATOR = .//button[@aria-label="Options menu"]
OUIA_COMPONENT_TYPE = PF4/Select
item_select(items, close=True)

Opens the Dropdown and selects the desired items.

Parameters
  • items – Items to be selected

  • close – Close the dropdown when finished

fill(items)

Fills all the items.

Parameters

items – list containing what items to be selected

class airgun.widgets.InventoryBootstrapSwitch(parent, class_name, **kwargs)

Checkbox-like Switch control, representing On and Off state. But with fancy UI and without any <form> elements. There’s also BootstrapSwitch widget in widgetastic_patternfly, but we don’t inherit from it as it uses completely different HTML structure than this one (it has underlying <input>).

ON_TOGGLE = .//span[contains(@class, 'bootstrap-switch-handle-on')]
OFF_TOGGLE = .//span[contains(@class, 'bootstrap-switch-handle-off')]
ROOT
property selected
property _clickable_el

In automation, you need to click on exact toggle element to trigger action

Returns: selenium webelement

fill(value)

Interactive objects like inputs, selects, checkboxes, et cetera should implement fill.

When you implement this method, it MUST ALWAYS return a boolean whether the value was changed. Otherwise it can break.

For actual filling, please use fill_with(). It offers richer interface for filling.

Returns

A boolean whether it changed the value or not.

read()

Each object should implement read so it is easy to get the value of such object.

When you implement this method, the exact return value is up to you but it MUST be consistent with what fill() takes.

Package Contents

Classes

Settings

class airgun.Settings
_configure_logging()
_configure_thirdparty_logging()
configure(settings=None)

Parses arg settings or settings file if None passed and sets class attributes accordingly

1

Created with sphinx-autoapi

Examples

For usage examples see Robottelo’s ui tests.

Concepts

Besides code which implements Widgetastic and navmazing functionality, two basic concepts used to abstract Satellite/Foreman UI functionality are Views and Entities.

View is fundamental basic concept that describes appearance of the page. Here we store all information about controls (widgets) on the page, specifically locators to them or when control is basic one that has common locator we just define widget without any further details. Of course, we try to address locators using id= or name= as first priority, but if we can’t - we go with XPath. If you see situation like this - create Foreman or Katello pull request to assign unique id attribute for necessary element where it is reasonable, as XPaths are more fragile and has worse performance to interact with.

Entity is fundamental basic concept that is responsible for functional side of application (Satellite in our case). It defines actions you can do with objects like CRUD (create, remove, update, delete) for example. That is only API that is visible for end user on test side. Also, we put all details about navigation here, so framework knows how to get to necessary page when you need to create specific object in the application.

AirGun adds bunch of widgets (which are specific to Satellite / Foreman web UI) to these defined by Widgetastic (like generic Text). Widgets allows you to interact with various UI elements and are used in views.

And finally tests. Tests are not part of AirGun repository. You can contribute tests to the Robottelo, tests/foreman/ ui folder (see “Quick start guide” below).

Quick start guide

  1. Clone Robottelo:

git clone https://github.com/SatelliteQE/robottelo.git
  1. Install requirements

cd robottelo && pip install -r requirements.txt

3. Create robottelo.properties file and fill it with your values (your may reuse already existing properties file since no changes were introduced there)

cp robottelo.properties.sample robottelo.properties
vim robottelo.properties
  1. Run airgun tests from Robottelo’s tests/foreman/ui/ folder

pytest tests/foreman/ui/test_architecture.py

Contributing

Good practice when working with Python project as AirGun is to work in Python’s virtual environments. To initiate and activate them before running pip … commands run:

virtualenv venv   # on Fedora you might need to use `virtualenv-3` if you have Python 2 as a default on your system
source venv/bin/activate

If you are about to start contributing, please follow GitHub flow.

For a new-comer, we have issues tagged with “good first issue” so that might be place where you can start?

When testing your AirGun code using Robottelo tests, you can make sure your development checkout of Airgun is used (instead the one installed in your Robottelo virtual environment) by setting PYTHONPATH properly (you can add that line at the end of your virtual environment activation script venv/bin/activate so it is set automatically next time you source it):

export PYTHONPATH="/home/username/workspace/airgun/:$PYTHONPATH"

When you are running your tests locally, you will need Chrome browser installed and chromedriver (download and unzip it) binary location set in webdriver_binary= configuration option in your robottelo.properties (or make it available somewhere in your PATH, e.g. in Robottelo venv/bin/).

As of now, only chromedriver is supported.