def get_queryset(self): queryset = super().get_queryset() if self.action == "get" or self.action == "list": if can_install_plugins(self.organization) or can_configure_plugins(self.organization): return queryset else: if can_install_plugins(self.organization): return queryset return queryset.none()
def check_for_updates(self, request: request.Request, **kwargs): if not can_install_plugins(self.organization): raise PermissionDenied("Plugin installation is not available for the current organization!") plugin = self.get_object() latest_url = parse_url(plugin.url, get_latest_if_none=True) plugin.latest_tag = latest_url.get("tag", latest_url.get("version", None)) plugin.latest_tag_checked_at = now() plugin.save() return Response({"plugin": PluginSerializer(plugin).data})
def upgrade(self, request: request.Request, **kwargs): plugin: Plugin = self.get_object() organization = self.organization if plugin.organization != organization: raise NotFound() if not can_install_plugins(self.organization, plugin.organization_id): raise PermissionDenied("Plugin upgrading is not available for the current organization!") serializer = PluginSerializer(plugin, context={"organization": organization}) validated_data = {} if plugin.plugin_type != Plugin.PluginType.SOURCE: validated_data = update_validated_data_from_url({}, plugin.url) serializer.update(plugin, validated_data) return Response(serializer.data)
def check_for_updates(self, request: request.Request, **kwargs): if not can_install_plugins(self.organization): raise PermissionDenied( "Plugin installation is not available for the current organization!" ) plugin = self.get_object() latest_url = parse_url(plugin.url, get_latest_if_none=True) # use update to not trigger the post_save signal and avoid telling the plugin server to reload vms Plugin.objects.filter(id=plugin.id).update(latest_tag=latest_url.get( "tag", latest_url.get("version", None)), latest_tag_checked_at=now()) return Response({"plugin": PluginSerializer(plugin).data})