Exemplo n.º 1
0
 def document_url(self):
     from bluebottle.utils.model_dispatcher import get_project_document_model
     document_model = get_project_document_model()
     content_type = ContentType.objects.get_for_model(document_model).id
     # pk may be unset if not saved yet, in which case no url can be
     # generated.
     if self.pk is not None:
         return reverse('document_download_detail',
                        kwargs={'content_type': content_type,
                                'pk': self.pk or 1})
     return None
Exemplo n.º 2
0
from bluebottle.geo.models import Country
from bluebottle.utils.serializers import MetaField
from bluebottle.bluebottle_drf2.serializers import OEmbedField

from bluebottle.bb_projects.serializers import ProjectThemeSerializer
from bluebottle.donations.models import Donation

from bluebottle.utils.model_dispatcher import get_project_model, get_project_document_model
from bluebottle.bb_projects.serializers import (ProjectSerializer as BaseProjectSerializer,
                                                ManageProjectSerializer as BaseManageProjectSerializer,
                                                ProjectPreviewSerializer as BaseProjectPreviewSerializer)

from bs4 import BeautifulSoup

PROJECT_MODEL = get_project_model()
PROJECT_DOCUMENT_MODEL = get_project_document_model()


class StoryField(serializers.WritableField):
    def to_native(self, value):
        """ Reading / Loading the story field """
        return value

    def from_native(self, data):
        """ Saving the story text """
        #Convert > and < back to HTML tags so Beautiful Soup can clean unwanted tags.
        #Script tags are sent by redactor as "<;script>;", Iframe tags have just one semicolon.
        data = data.replace("&lt;;", "<").replace("&gt;;", ">").replace("&lt;", "<").replace("&gt;", ">")
        soup = BeautifulSoup(data, "html.parser")
        [s.extract() for s in soup(['script', 'iframe'])]
        return str(soup)