Exemple #1
0
    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)
Exemple #2
0
 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)
Exemple #3
0
 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
Exemple #4
0
 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()
Exemple #5
0
    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)
Exemple #6
0
 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
Exemple #7
0
 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")