class PackageDefinitionsTable(tables.DataTable): name = md_utils.Column('name', link="horizon:app-catalog:packages:detail", verbose_name=_('Package Name')) tenant_name = tables.Column('tenant_name', verbose_name=_('Tenant Name')) enabled = tables.Column('enabled', verbose_name=_('Active')) is_public = tables.Column('is_public', verbose_name=_('Public')) type = tables.Column('type', verbose_name=_('Type')) version = tables.Column(lambda obj: getattr(obj, 'version', None), verbose_name=_('Version')) created_time = tables.Column('created', verbose_name=_('Created'), filters=(filters.parse_isotime, )) updated_time = tables.Column('updated', verbose_name=_('Updated'), filters=(filters.parse_isotime, )) def get_prev_pagination_string(self): pagination_string = super(PackageDefinitionsTable, self).get_prev_pagination_string() return pagination_string + "&sort_dir=desc" class Meta(object): name = 'packages' prev_pagination_param = 'marker' verbose_name = _('Packages') table_actions_menu = (ToggleEnabled, TogglePublicEnabled) table_actions = (PackagesFilterAction, ImportPackage, ImportBundle, DeletePackage) row_actions = (ModifyPackage, DownloadPackage, ToggleEnabled, TogglePublicEnabled, DeletePackage)
class EnvConfigTable(tables.DataTable): name = md_utils.Column('name', verbose_name=_('Name')) _type = tables.Column(lambda datum: get_service_type(datum) or 'Unknown', verbose_name=_('Type')) def get_object_id(self, datum): return datum['?']['id'] class Meta(object): name = 'environment_configuration' verbose_name = _('Deployed Components')
class CategoriesTable(tables.DataTable): name = md_utils.Column('name', verbose_name=_('Category Name')) use_artifacts = getattr(settings, 'MURANO_USE_GLARE', False) if not use_artifacts: package_count = tables.Column('package_count', verbose_name=_('Package Count')) class Meta(object): name = 'categories' verbose_name = _('Application Categories') table_actions = (AddCategory,) row_actions = (DeleteCategory,) multi_select = False
class MarkedImagesTable(tables.DataTable): image = tables.Column('name', link='horizon:project:images:images:detail', verbose_name=_('Image')) type = tables.Column(lambda obj: getattr(obj, 'type', None), verbose_name=_('Type')) title = md_utils.Column(lambda obj: getattr(obj, 'title', None), verbose_name=_('Title')) class Meta(object): name = 'marked_images' verbose_name = _('Marked Images') table_actions = (MarkImage, RemoveImageMetadata) row_actions = (RemoveImageMetadata, )
class EnvironmentsTable(tables.DataTable): name = md_utils.Column( 'name', link='horizon:app-catalog:environments:services', verbose_name=_('Name'), form_field=forms.CharField(required=False), update_action=UpdateName) status = tables.Column('status', verbose_name=_('Status'), status=True, status_choices=consts.STATUS_CHOICES, display_choices=consts.STATUS_DISPLAY_CHOICES) def get_env_detail_link(self, environment): # NOTE: using the policy check for show_environment if policy.check((("murano", "show_environment"),), self.request, target={"environment": environment}): return reverse("horizon:app-catalog:environments:services", args=(environment.id,)) return None def __init__(self, request, data=None, needs_form_wrapper=None, **kwargs): super(EnvironmentsTable, self).__init__(request, data=data, needs_form_wrapper=needs_form_wrapper, **kwargs) self.columns['name'].get_link_url = self.get_env_detail_link class Meta(object): name = 'environments' verbose_name = _('Environments') template = 'environments/_data_table.html' row_class = UpdateEnvironmentRow status_columns = ['status'] no_data_message = _('NO ENVIRONMENTS') table_actions_menu = (AbandonEnvironment, DeploymentHistory) table_actions = (CreateEnvironment, DeployEnvironment, DeleteEnvironment) row_actions = (ShowEnvironmentServices, DeployEnvironment, DeleteEnvironment, AbandonEnvironment, UpdateEnvMetadata)
class ServicesTable(tables.DataTable): name = md_utils.Column('name', verbose_name=_('Name'), link=get_service_details_link) _type = tables.Column(get_service_type, verbose_name=_('Type')) status = tables.Column(lambda datum: datum['?'].get('status'), verbose_name=_('Status'), status=True, status_choices=consts.STATUS_CHOICES, display_choices=consts.STATUS_DISPLAY_CHOICES) operation = tables.Column('operation', verbose_name=_('Last operation'), filters=(defaultfilters.urlize, )) operation_updated = tables.Column('operation_updated', verbose_name=_('Time updated'), filters=(filters.parse_isotime, )) def get_object_id(self, datum): return datum['?']['id'] def get_apps_list(self): packages = [] with api_utils.handled_exceptions(self.request): packages, self._more = pkg_api.package_list(self.request, filters={ 'type': 'Application', 'catalog': True }) return [package.to_dict() for package in packages] def actions_allowed(self): status, version = _get_environment_status_and_version( self.request, self) return status not in consts.NO_ACTION_ALLOWED_STATUSES def get_categories_list(self): return catalog_views.get_categories_list(self.request) def get_row_actions(self, datum): actions = super(ServicesTable, self).get_row_actions(datum) environment_id = self.kwargs['environment_id'] app_actions = [] for action_datum in api.extract_actions_list(datum): _classes = ('murano_action', ) class CustomAction(tables.LinkAction): name = action_datum['name'] verbose_name = action_datum.get('title') or name url = reverse('horizon:app-catalog:environments:start_action', args=(environment_id, action_datum['id'])) classes = _classes table = self def allowed(self, request, datum): status, version = _get_environment_status_and_version( request, self.table) if status in consts.NO_ACTION_ALLOWED_STATUSES: return False return True bound_action = CustomAction() if not bound_action.allowed(self.request, datum): continue bound_action.datum = datum if issubclass(bound_action.__class__, tables.LinkAction): bound_action.bound_url = bound_action.get_link_url(datum) app_actions.append(bound_action) if app_actions: # Show native actions first (such as "Delete Component") and # then add sorted application actions actions.extend(sorted(app_actions, key=lambda x: x.name)) return actions def get_repo_url(self): return pkg_consts.DISPLAY_MURANO_REPO_URL def get_pkg_def_url(self): return reverse('horizon:app-catalog:packages:index') class Meta(object): name = 'services' verbose_name = _('Component List') no_data_message = _('No components') status_columns = ['status'] row_class = UpdateServiceRow table_actions = (AddApplication, DeployThisEnvironment) row_actions = (DeleteService, UpdateMetadata) multi_select = False