Source code for vent.menus.inventory

from collections import deque

import npyscreen

from vent.api.templates import Template


[docs]class InventoryForm(npyscreen.FormBaseNew): """ Inventory form for the Vent CLI """ def __init__(self, action=None, logger=None, *args, **keywords): """ Initialize inventory form objects """ self.action = action self.logger = logger self.api_action = self.action['api_action'] # get list of all possible group views to display self.views = deque() possible_groups = set() manifest = Template(self.api_action.plugin.manifest) if self.action['cores']: tools = self.api_action.inventory(choices=['core'])[1]['core'] else: tools = self.api_action.inventory(choices=['tools'])[1]['tools'] for tool in tools: groups = manifest.option(tool, 'groups')[1].split(',') for group in groups: # don't do core because that's the purpose of all in views if group != '' and group != 'core': possible_groups.add(group) self.views += possible_groups self.views.append('all groups') super(InventoryForm, self).__init__(*args, **keywords)
[docs] def quit(self, *args, **kwargs): """ Overridden to switch back to MAIN form """ self.parentApp.switchForm('MAIN')
[docs] def toggle_view(self, *args, **kwargs): group = self.views.popleft() new_display = [] new_display.append('Tools for group ' + group + ' found:') manifest = Template(self.api_action.plugin.manifest) cur_repo = '' for i in range(1, len(self.all_tools) - 1): val = self.all_tools[i] # get repo val if val.startswith(' Plugin:'): new_display.append(val) cur_repo = val.split(':', 1)[1].strip() # determine if tool should be displayed in this group elif val.startswith(' ') and not val.startswith(' '): name = val.strip() constraints = {'repo': cur_repo, 'name': name} t_section = self.api_action.p_helper \ .constraint_options(constraints, [])[0] t_section = list(t_section.keys())[0] if group in manifest.option(t_section, 'groups')[1].split(','): new_display += self.all_tools[i:i+5] elif val == '': new_display.append(val) # if all groups display all groups if group == 'all groups': self.display_val.values = self.all_tools else: self.display_val.values = new_display # redraw self.display() # add group back into cycle self.views.append(group)
[docs] def create(self): """ Override method for creating FormBaseNew form """ self.add_handlers({'^T': self.quit, '^Q': self.quit, '^V': self.toggle_view}) self.add(npyscreen.TitleFixedText, name=self.action['title'], value='') response = self.action['api_action'].inventory(choices=['repos', 'core', 'tools', 'images', 'built', 'running', 'enabled']) if response[0]: inventory = response[1] if len(inventory['repos']) == 0: value = 'No tools were found.\n' else: value = 'Tools for all groups found:\n' tools = None if self.action['cores'] and inventory['core']: tools = inventory['core'] elif not self.action['cores'] and inventory['tools']: tools = inventory['tools'] for repo in inventory['repos']: s_value = '' repo_name = repo.rsplit('/', 2)[1:] if len(repo_name) == 1: repo_name = repo.split('/') if tools: p_value = '\n Plugin: ' + repo + '\n' for tool in tools: t_name = tool.split(':') if (t_name[0] == repo_name[0] and t_name[1] == repo_name[1]): s_value += ' ' + tools[tool] + '\n Built: ' s_value += inventory['built'][tool] + '\n' s_value += ' Enabled: ' s_value += inventory['enabled'][tool] + '\n' s_value += ' Image name: ' s_value += inventory['images'][tool] + '\n' s_value += ' Status: ' s_value += inventory['running'][tool] + '\n' if s_value: value += p_value + s_value else: value = 'There was an issue with ' + self.action['name'] value += ' retrieval:\n' + str(response[1]) value += '\nPlease see vent.log for more details.' self.all_tools = value.split('\n') self.display_val = self.add(npyscreen.Pager, values=value.split('\n'))