from navmazing import NavigateToAttribute, NavigateToSibling
from widgetastic_manageiq import ItemNotFound
from widgetastic_patternfly import CandidateNotFound
from cfme.generic_objects.instance.ui import GenericObjectInstanceAllView
from cfme.utils.appliance import MiqImplementationContext
from cfme.utils.appliance.implementations.ui import navigator, CFMENavigateStep, navigate_to, ViaUI
from . import GenericObjectDefinition, GenericObjectDefinitionCollection
from .definition_views import (
GenericObjectDefinitionDetailsView, GenericObjectDefinitionAllView,
GenericObjectDefinitionEditView, GenericObjectDefinitionAddView
)
@MiqImplementationContext.external_for(GenericObjectDefinitionCollection.create, ViaUI)
[docs]def create(self, name, description, attributes=None, associations=None, methods=None,
custom_image_file_path=None, cancel=False):
"""
Create new generic object definition
Args:
name: generic object definition name
description: generic object definition description
attributes: generic object definition attributes ex. {'address': 'string'}
associations: generic object definition associations ex. {'services': 'Service'}
methods: generic object definition methods ex. ['method1', 'method2']
custom_image_file_path: generic object definition custom image file path
cancel: by default will not be canceled, pass True to make successful cancel
Returns:
GenericObjectDefinition entity
"""
view = navigate_to(self, 'Add')
view.fill({
'name': name,
'description': description,
'associations': associations,
'attributes': attributes,
'methods': methods,
'custom_image_file': {'file': custom_image_file_path}
})
if cancel:
view.cancel.click()
else:
view.add.click()
view.flash.assert_no_error()
entity = self.instantiate(
name=name, description=description, attributes=attributes, associations=associations,
methods=methods, custom_image_file_path=custom_image_file_path
)
return entity
@MiqImplementationContext.external_for(GenericObjectDefinition.update, ViaUI)
[docs]def update(self, updates, reset=False, cancel=False):
"""Update generic object definition
Args:
updates: dict, with fields to update
"""
view = navigate_to(self, 'Edit')
view.fill({
'name': updates.get('name'),
'description': updates.get('description'),
'associations': updates.get('associations'),
'attributes': updates.get('attributes'),
'methods': updates.get('methods'),
'custom_image_file': {'file': updates.get('custom_image_file_path')}
})
if reset:
view.reset.click()
if cancel:
view.cancel.click()
elif not reset and not cancel:
view.save.click()
view = self.create_view(GenericObjectDefinitionDetailsView, override=updates)
assert view.is_displayed
view.flash.assert_no_error()
@MiqImplementationContext.external_for(GenericObjectDefinition.delete, ViaUI)
[docs]def delete(self):
"""Delete generic object definition
"""
view = navigate_to(self, 'Details')
view.configuration.item_select(
'Remove this Generic Object Classes from Inventory', handle_alert=True)
view = self.create_view(GenericObjectDefinitionAllView)
assert view.is_displayed
view.flash.assert_no_error()
@MiqImplementationContext.external_for(GenericObjectDefinition.exists.getter, ViaUI)
[docs]def exists(self):
try:
navigate_to(self, 'Details')
return True
except (CandidateNotFound, ItemNotFound):
return False
@MiqImplementationContext.external_for(GenericObjectDefinition.generic_objects.getter, ViaUI)
[docs]def generic_objects(self):
return self.collections.generic_objects
@navigator.register(GenericObjectDefinitionCollection)
[docs]class All(CFMENavigateStep):
VIEW = GenericObjectDefinitionAllView
prerequisite = NavigateToAttribute('appliance.server', 'LoggedIn')
[docs] def step(self):
self.prerequisite_view.navigation.select('Automation', 'Automate', 'Generic Objects')
@navigator.register(GenericObjectDefinitionCollection)
[docs]class Add(CFMENavigateStep):
VIEW = GenericObjectDefinitionAddView
prerequisite = NavigateToSibling('All')
[docs] def step(self):
self.prerequisite_view.toolbar.configuration.item_select('Add a new Generic Object Class')
@navigator.register(GenericObjectDefinition)
[docs]class Details(CFMENavigateStep):
VIEW = GenericObjectDefinitionDetailsView
prerequisite = NavigateToAttribute('parent', 'All')
[docs] def step(self):
self.prerequisite_view.entities.get_entity(name=self.obj.name, surf_pages=True).click()
@navigator.register(GenericObjectDefinition)
[docs]class Edit(CFMENavigateStep):
VIEW = GenericObjectDefinitionEditView
prerequisite = NavigateToSibling('Details')
[docs] def step(self):
self.prerequisite_view.configuration.item_select('Edit this Generic Object Class')
@navigator.register(GenericObjectDefinition)
[docs]class Instances(CFMENavigateStep):
VIEW = GenericObjectInstanceAllView
prerequisite = NavigateToSibling('Details')
[docs] def step(self):
self.prerequisite_view.summary('Relationships').click_at('Instances')