Esempio n. 1
0
    def create(self, validated_data):
        user = self.user_from_request()
        added_context_data = {
            field: self.context[field]
            for field in {"is_page_content", "filename", "dirpath", "text_id"}
            if field in self.context
        }
        if validated_data.get("type") == "resource":
            update_youtube_thumbnail(self.context["website_id"],
                                     validated_data.get("metadata"))

        if "file" in validated_data:
            if "metadata" not in validated_data:
                validated_data["metadata"] = {}
            validated_data["metadata"]["file_type"] = detect_mime_type(
                validated_data["file"])

        instance = super().create({
            "website_id": self.context["website_id"],
            "owner": user,
            "updated_by": user,
            **validated_data,
            **added_context_data,
        })
        update_website_backend(instance.website)
        return instance
Esempio n. 2
0
 def update(self, instance, validated_data):
     """ Remove owner attribute if present, it should not be changed"""
     validated_data.pop("owner", None)
     with transaction.atomic():
         website = super().update(instance, validated_data)
     update_website_backend(website)
     return website
Esempio n. 3
0
def test_update_website_backend_disabled(settings, mocker):
    """Verify update_website_backend doesn't do anything if syncing is disabled"""
    settings.CONTENT_SYNC_BACKEND = None
    mocker.patch("content_sync.api.is_sync_enabled", return_value=False)
    mock_task = mocker.patch("content_sync.tasks.sync_website_content")
    website = WebsiteFactory.create()
    api.update_website_backend(website)
    mock_task.delay.assert_not_called()
Esempio n. 4
0
def test_update_website_backend(settings, mocker):
    """Verify update_website_backend calls the appropriate task"""
    settings.CONTENT_SYNC_BACKEND = "content_sync.backends.SampleBackend"
    mocker.patch("content_sync.api.is_sync_enabled", return_value=True)
    mock_task = mocker.patch("content_sync.tasks.sync_website_content")
    website = WebsiteFactory.create()
    api.update_website_backend(website)
    mock_task.delay.assert_called_once_with(website.name)
Esempio n. 5
0
 def perform_destroy(self, instance: WebsiteContent):
     """ (soft) deletes a WebsiteContent record """
     instance.updated_by = self.request.user
     super().perform_destroy(
         instance
     )  # this actually performs a save() because it's a soft delete
     update_website_backend(instance.website)
     return instance
Esempio n. 6
0
 def update(self, instance, validated_data):
     """Add updated_by to the data"""
     if instance.type == "resource":
         update_youtube_thumbnail(instance.website.uuid,
                                  validated_data.get("metadata"),
                                  overwrite=True)
     if "file" in validated_data:
         if "metadata" not in validated_data:
             validated_data["metadata"] = {}
         validated_data["metadata"]["file_type"] = detect_mime_type(
             validated_data["file"])
     existing_metadata = instance.metadata if instance.metadata else {}
     if "metadata" in validated_data:
         validated_data["metadata"] = {
             **existing_metadata,
             **validated_data["metadata"],
         }
     instance = super().update(instance, {
         "updated_by": self.user_from_request(),
         **validated_data
     })
     update_website_backend(instance.website)
     return instance