def job(self, request: request.Request, **kwargs): if not can_configure_plugins(self.team.organization_id): raise ValidationError( "Plugin configuration is not available for the current organization!" ) plugin_config_id = self.get_object().id job = request.data.get("job", {}) if "type" not in job: raise ValidationError("The job type must be specified!") # the plugin server uses "type" for job names but "name" makes for a more friendly API job_type = job.get("type") job_payload = job.get("payload", {}) job_op = job.get("operation", "start") celery_app.send_task( name="posthog.tasks.plugins.plugin_job", queue=settings.PLUGINS_CELERY_QUEUE, args=[ self.team.pk, plugin_config_id, job_type, job_op, job_payload ], ) return Response(status=200)
def destroy(self, request: request.Request, pk=None, **kwargs) -> Response: # type: ignore if not can_configure_plugins(self.team.organization_id): return Response(status=404) plugin_config = PluginConfig.objects.get(team_id=self.team_id, pk=pk) plugin_config.enabled = False plugin_config.save() return Response(status=204)
def create(self, validated_data: Dict, *args: Any, **kwargs: Any) -> PluginConfig: if not can_configure_plugins(Team.objects.get(id=self.context["team_id"]).organization_id): raise ValidationError("Plugin configuration is not available for the current organization!") validated_data["team"] = Team.objects.get(id=self.context["team_id"]) _fix_formdata_config_json(self.context["request"], validated_data) plugin_config = super().create(validated_data) _update_plugin_attachments(self.context["request"], plugin_config) return plugin_config
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 rearrange(self, request: request.Request, **kwargs): if not can_configure_plugins(self.team.organization_id): raise ValidationError("Plugin configuration is not available for the current organization!") orders = request.data.get("orders", {}) plugin_configs = PluginConfig.objects.filter(team_id=self.team.pk, enabled=True) plugin_configs_dict = {p.plugin_id: p for p in plugin_configs} for plugin_id, order in orders.items(): plugin_config = plugin_configs_dict.get(int(plugin_id), None) if plugin_config and plugin_config.order != order: plugin_config.order = order plugin_config.save() return Response(PluginConfigSerializer(plugin_configs, many=True).data)
def create(self, validated_data: Dict, *args: Any, **kwargs: Any) -> PluginConfig: if not can_configure_plugins( Team.objects.get(id=self.context["team_id"]).organization_id): raise ValidationError( "Plugin configuration is not available for the current organization!" ) validated_data["team"] = Team.objects.get(id=self.context["team_id"]) _fix_formdata_config_json(self.context["request"], validated_data) existing_config = PluginConfig.objects.filter( team=validated_data["team"], plugin_id=validated_data["plugin"]) if existing_config.exists(): return self.update(existing_config.first(), validated_data) # type: ignore plugin_config = super().create(validated_data) _update_plugin_attachments(self.context["request"], plugin_config) return plugin_config
def get_queryset(self): if not can_configure_plugins(self.team.organization_id): return self.queryset.none() return super().get_queryset().order_by("order", "plugin_id")