Пример #1
0
 def test_partial_accept(self):
     text1 = "Organisation de conferences lors de la Fete de la science"
     text2 = "Organisation mon texte de la Fete de la autre texte science"
     soup_wrapped, textdiff = html_diff_wrapper.render_html_diff(
         text1, text2, 'modif')
     correction_tags = soup_wrapped.find_all('span', {'id': "modif"})
     descriminator = 0
     for correction_tag in correction_tags:
         correction_tag['data-item'] = str(descriminator)
         descriminator += 1
     result = html_diff_wrapper.soup_to_text(soup_wrapped)
     #2 modifs
     self.assertEqual(
         result,
         'Organisation <span data-item="0" id="modif"><del>de conferences lors</del><ins>mon texte</ins></span> de la Fete de la <span data-item="1" id="modif"><ins>autre texte </ins></span>science'
     )
     items = ['0']
     corrections = []
     for item in items:
         corrections.extend(
             soup_wrapped.find_all('span', {
                 'id': 'modif',
                 'data-item': item
             }))
     #resfuse the first modif
     soup = html_diff_wrapper.include_diffs(soup_wrapped, corrections,
                                            "ins", "del", None)
     result = html_diff_wrapper.soup_to_text(soup)
     self.assertEqual(
         result,
         'Organisation de conferences lors de la Fete de la <span data-item="1" id="modif"><ins>autre texte </ins></span>science'
     )
     items = ['1']
     corrections = []
     for item in items:
         corrections.extend(
             soup_wrapped.find_all('span', {
                 'id': 'modif',
                 'data-item': item
             }))
     #accept the last modif
     soup = html_diff_wrapper.include_diffs(soup_wrapped, corrections,
                                            "del", "ins", None)
     result = html_diff_wrapper.soup_to_text(soup)
     #the text with only the last modif
     self.assertEqual(
         result,
         'Organisation de conferences lors de la Fete de la autre texte science'
     )
     soup_wrapped, textdiff = html_diff_wrapper.render_html_diff(
         text1, result, 'modif')
     result = html_diff_wrapper.soup_to_text(soup_wrapped)
     #1 modif (accepted modif)
     self.assertEqual(
         result,
         'Organisation de conferences lors de la Fete de la <span id="modif"><ins>autre texte </ins></span>science'
     )
Пример #2
0
    def start(self, context, request, appstruct, **kw):
        user = get_current(request)
        user = context.working_group.get_member(user)
        correction = appstruct['_object_data']
        correction.text = html_diff_wrapper.normalize_text(correction.text)
        old_text = correction.text
        correction.setproperty('author', user)
        version = context.get_version(user, (context, 'version'))
        context.addtoproperty('corrections', correction)
        correction.setproperty('current_version', version)
        context.setproperty('version', version.version)
        souptextdiff, textdiff = html_diff_wrapper.render_html_diff(
            getattr(context, 'text', ''),
            getattr(correction, 'text', ''),
            "correction")
        soupdescriptiondiff, descriptiondiff = html_diff_wrapper.render_html_diff(
            getattr(context, 'description', ''),
            getattr(correction, 'description', ''),
            "correction")
        souptitlediff, titlediff = html_diff_wrapper.render_html_diff(
            getattr(context, 'title', ''),
            getattr(correction, 'title', ''),
            "correction")
        descriminator = 0
        descriminator = self._identify_corrections(souptitlediff,
                                                   correction,
                                                   descriminator,
                                                   'title',
                                                   user)
        self._add_actions(correction, request, souptitlediff)
        descriminator = self._identify_corrections(soupdescriptiondiff,
                                                   correction,
                                                   descriminator,
                                                   'description',
                                                   user)
        self._add_actions(correction, request, soupdescriptiondiff)
        self._identify_corrections(souptextdiff, correction,
                                   descriminator, 'text',
                                   user)
        self._add_actions(correction, request, souptextdiff)
        correction.text = html_diff_wrapper.soup_to_text(souptextdiff)
        correction.description = html_diff_wrapper.soup_to_text(soupdescriptiondiff)
        correction.title = html_diff_wrapper.soup_to_text(souptitlediff)
        if souptextdiff.find_all("span", id="correction") or \
           soupdescriptiondiff.find_all("span", id="correction") or\
           souptitlediff.find_all("span", id="correction"):
            correction.state.append('in process')
            alert('internal', [request.root], context.working_group.members,
                  internal_kind=InternalAlertKind.working_group_alert,
                  subjects=[context], alert_kind='correction_added')
        else:
            context.text = old_text

        return {}
    def test_render_htmldiff(self):
        text_origin = "Organiser des <strong>animation</strong> lors de la Fete de la science."
        text = "Organiser des lors de la Fete de la science."
        soup, diff = html_diff_wrapper.render_html_diff(text_origin, 
                                                        text)
        self.assertEqual(diff, '<div class="diff">Organiser des <span id="diff_id"><del><strong>animation</strong> </del></span>lors de la Fete de la science.</div>')

        text_origin = "Organiser des <strong>animation</strong> lors de <strong>la Fete</strong> de la science."
        text = "Organiser des lors de <strong>la Fete</strong> de la science."
        soup, diff = html_diff_wrapper.render_html_diff(text_origin, 
                                                        text)
        self.assertEqual(diff, '<div class="diff">Organiser des <span id="diff_id"><del><strong>animation</strong> </del></span>lors de <strong><strong>la Fete</strong> de la science.</strong></div>')
Пример #4
0
    def start(self, context, request, appstruct, **kw):
        user = get_current(request)
        user = context.working_group.get_member(user)
        correction = appstruct['_object_data']
        correction.text = html_diff_wrapper.normalize_text(correction.text)
        old_text = correction.text
        correction.setproperty('author', user)
        version = context.get_version(user, (context, 'version'))
        context.addtoproperty('corrections', correction)
        correction.setproperty('current_version', version)
        context.setproperty('version', version.version)
        souptextdiff, textdiff = html_diff_wrapper.render_html_diff(
            getattr(context, 'text', ''), getattr(correction, 'text', ''),
            "correction")
        soupdescriptiondiff, descriptiondiff = html_diff_wrapper.render_html_diff(
            getattr(context, 'description', ''),
            getattr(correction, 'description', ''), "correction")
        souptitlediff, titlediff = html_diff_wrapper.render_html_diff(
            getattr(context, 'title', ''), getattr(correction, 'title', ''),
            "correction")
        descriminator = 0
        descriminator = self._identify_corrections(souptitlediff, correction,
                                                   descriminator, 'title',
                                                   user)
        self._add_actions(correction, request, souptitlediff)
        descriminator = self._identify_corrections(soupdescriptiondiff,
                                                   correction, descriminator,
                                                   'description', user)
        self._add_actions(correction, request, soupdescriptiondiff)
        self._identify_corrections(souptextdiff, correction, descriminator,
                                   'text', user)
        self._add_actions(correction, request, souptextdiff)
        correction.text = html_diff_wrapper.soup_to_text(souptextdiff)
        correction.description = html_diff_wrapper.soup_to_text(
            soupdescriptiondiff)
        correction.title = html_diff_wrapper.soup_to_text(souptitlediff)
        if souptextdiff.find_all("span", id="correction") or \
           soupdescriptiondiff.find_all("span", id="correction") or\
           souptitlediff.find_all("span", id="correction"):
            correction.state.append('in process')
            alert('internal', [request.root],
                  context.working_group.members,
                  internal_kind=InternalAlertKind.working_group_alert,
                  subjects=[context],
                  alert_kind='correction_added')
        else:
            context.text = old_text

        return {}
Пример #5
0
    def update(self):
        result = {}
        site = get_site_folder(True, self.request)
        user = get_current(self.request)
        is_manager = has_any_roles(
            user=user,
            roles=('Admin', ('SiteAdmin', site))) or\
            is_site_moderator(self.request)
        duplicates = find_duplicates_artist(self.context, self.duplicates_state)
        diff_bodies = {}
        context_view = self.content(
            args={'object': self.context},
            template=self.context.templates.get('diff', None))['body']

        for duplicate in duplicates:
            duplicate_view = self.content(
                args={'object': duplicate},
                template=duplicate.templates.get('diff', None))['body']
            soupt, textdiff = html_diff_wrapper.render_html_diff(
                context_view, duplicate_view)
            diff_bodies[duplicate] = (textdiff, get_oid(duplicate))

        values = {'context': self.context,
                  'oid': get_oid(self.context),
                  'context_view': context_view,
                  'contents': diff_bodies,
                  'row_len': math.ceil(len(diff_bodies)/2),
                  'is_manager': is_manager,
                  'view': self}
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Пример #6
0
    def update(self):
        result = {}
        duplicates = get_duplicates(self.context)
        diff_bodies = {}
        context_view = self.content(args={'object': self.context},
                                    template=self.context.templates.get(
                                        'diff', None))['body']

        for duplicate in duplicates:
            duplicate_view = self.content(args={'object': duplicate},
                                          template=duplicate.templates.get(
                                              'diff', None))['body']
            soupt, textdiff = html_diff_wrapper.render_html_diff(
                context_view, duplicate_view)
            diff_bodies[duplicate] = (textdiff, get_oid(duplicate))

        values = {
            'context': self.context,
            'oid': get_oid(self.context),
            'context_view': context_view,
            'contents': diff_bodies,
            'view': self
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Пример #7
0
    def update(self):
        result = {}
        duplicates = get_duplicates(self.context)
        diff_bodies = {}
        context_view = self.content(
            args={'object': self.context},
            template=self.context.templates.get('diff', None))['body']

        for duplicate in duplicates:
            duplicate_view = self.content(
                args={'object': duplicate},
                template=duplicate.templates.get('diff', None))['body']
            soupt, textdiff = html_diff_wrapper.render_html_diff(
                context_view, duplicate_view)
            diff_bodies[duplicate] = (textdiff, get_oid(duplicate))

        values = {'context': self.context,
                  'oid': get_oid(self.context),
                  'context_view': context_view,
                  'contents': diff_bodies,
                  'view': self}
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Пример #8
0
    def test_different_treatments_in_one_sentence(self):
        text1 = "fete de la science.Organiser des animations lors de la Fete de la science qui se deroule au mois d'octobre. Programme: - conferences - expositions - autres"
        text2 = "Fete de la science. Organiser des animations lors de la Fete de la science qui se deroule au mois du 24/09/2014 au 19/10/2014. Programme: - conferences - expositions - autres"
        soup, textdiff = html_diff_wrapper.render_html_diff(
            text1, text2, 'modif')

        spanids_data = []
        spans = soup.find_all('span', {'id': "modif"})
        descriminator = 1
        for span in spans:
            span['data-item'] = str(descriminator)
            descriminator += 1

        fselection = self._include_spanids(spans[0:2], "del", "ins")
        for span in fselection:
            spanids_data.append(span)

        lselection = self._include_spanids(spans[2:], "ins", "del")
        for span in lselection:
            spanids_data.append(span)

        html_diff_wrapper.unwrap_diff(spanids_data, soup)
        soup_to_text = html_diff_wrapper.soup_to_text(soup)
        self.assertEqual(
            soup_to_text,
            "Fete de la science. Organiser des animations lors de la Fete de la science qui se deroule au mois d'octobre. Programme: - conferences - expositions - autres"
        )
Пример #9
0
    def start(self, context, request, appstruct, **kw):
        user = get_current()
        source = appstruct['source']
        targets = appstruct['targets']
        if can_access(user, source) and all(can_access(user, target)
                                            for target in targets):
            diff_bodies = {}
            source_view = renderers.render(
                source.templates.get('diff', None),
                {'object': source},
                request)

            for target in targets:
                target_view = renderers.render(
                    target.templates.get('diff', None),
                    {'object': target},
                    request)
                soupt, textdiff = html_diff_wrapper.render_html_diff(
                    source_view, target_view)
                diff_bodies[target] = (textdiff, get_oid(target))

            return {'context_view': source_view,
                    'contents': diff_bodies}

        return {}
Пример #10
0
    def test_render_htmldiff(self):
        text_origin = "Organiser des <strong>animation</strong> lors de la Fete de la science."
        text = "Organiser des lors de la Fete de la science."
        soup, diff = html_diff_wrapper.render_html_diff(text_origin, text)
        self.assertEqual(
            diff,
            '<div class="diff">Organiser des <span id="diff_id"><del><strong>animation</strong> </del></span>lors de la Fete de la science.</div>'
        )

        text_origin = "Organiser des <strong>animation</strong> lors de <strong>la Fete</strong> de la science."
        text = "Organiser des lors de <strong>la Fete</strong> de la science."
        soup, diff = html_diff_wrapper.render_html_diff(text_origin, text)
        self.assertEqual(
            diff,
            '<div class="diff">Organiser des <span id="diff_id"><del><strong>animation</strong> </del></span>lors de <strong><strong>la Fete</strong> de la science.</strong></div>'
        )
Пример #11
0
 def get_explanation_diff(self, context, request):
     proposal = context.proposal
     souptextdiff, textdiff = html_diff_wrapper.render_html_diff(
         getattr(proposal, 'text', ''), getattr(context, 'text', ''),
         "explanation")
     descriminator = 1
     explanations = self._identify_explanations(context, request,
                                                souptextdiff, descriminator)
     return souptextdiff, explanations
Пример #12
0
 def get_explanation_diff(self, context, request):
     proposal = context.proposal
     souptextdiff, textdiff = html_diff_wrapper.render_html_diff(
     	                        getattr(proposal, 'text', ''),
                                 getattr(context, 'text', ''),
                                 "explanation")
     descriminator = 1
     explanations = self._identify_explanations(context, request, 
                                                souptextdiff, descriminator)
     return souptextdiff, explanations
Пример #13
0
    def update(self):
        version = self.params('version')
        titlediff = ''
        textdiff = ''
        descriptiondiff = ''
        keywordsdiff = []
        versionobj = None
        if version is not None:
            versionobj = get_obj(int(version))
            soupt, textdiff = html_diff_wrapper.render_html_diff(
                getattr(versionobj, 'text', ''),
                getattr(self.context, 'text', ''))
            soupd, descriptiondiff = html_diff_wrapper.render_html_diff(
                '<div>'+getattr(versionobj, 'description', '')+'</div>',
                '<div>'+getattr(self.context, 'description', '')+'</div>')
            soupt, titlediff = html_diff_wrapper.render_html_diff(
                getattr(versionobj, 'title', ''),
                getattr(self.context, 'title', ''))
            for k in versionobj.keywords:
                if k in self.context.keywords:
                    keywordsdiff.append({'title': k, 'state': 'nothing'})
                else:
                    keywordsdiff.append({'title': k, 'state': 'del'})

            [keywordsdiff.append({'title': k, 'state': 'ins'})
             for k in self.context.keywords if k not in versionobj.keywords]

        result = {}
        values = {
            'version': versionobj,
            'idee': self.context,
            'textdiff': textdiff,
            'titlediff': titlediff,
            'descriptiondiff': descriptiondiff,
            'keywordsdiff': keywordsdiff
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
 def test_partial_accept(self):
     text1 = "Organisation de conferences lors de la Fete de la science"
     text2 = "Organisation mon texte de la Fete de la autre texte science"
     soup_wrapped, textdiff = html_diff_wrapper.render_html_diff(text1, text2, 'modif')
     correction_tags = soup_wrapped.find_all('span', {'id': "modif"})
     descriminator = 0
     for correction_tag in correction_tags:
         correction_tag['data-item'] = str(descriminator)
         descriminator += 1
     result = html_diff_wrapper.soup_to_text(soup_wrapped)
     #2 modifs
     self.assertEqual(result,
          'Organisation <span data-item="0" id="modif"><del>de conferences lors</del><ins>mon texte</ins></span> de la Fete de la <span data-item="1" id="modif"><ins>autre texte </ins></span>science')
     items = ['0']
     corrections = []
     for item in items:
         corrections.extend(soup_wrapped.find_all('span', {'id':'modif', 
                                                   'data-item': item}))
     #resfuse the first modif
     soup = html_diff_wrapper.include_diffs(soup_wrapped, corrections,
                     "ins", "del", None)
     result = html_diff_wrapper.soup_to_text(soup)
     self.assertEqual(result, 'Organisation de conferences lors de la Fete de la <span data-item="1" id="modif"><ins>autre texte </ins></span>science')
     items = ['1']
     corrections = []
     for item in items:
         corrections.extend(soup_wrapped.find_all('span', {'id':'modif', 
                                                   'data-item': item}))
     #accept the last modif
     soup = html_diff_wrapper.include_diffs(soup_wrapped, corrections,
                     "del", "ins", None)
     result = html_diff_wrapper.soup_to_text(soup)
     #the text with only the last modif
     self.assertEqual(result, 'Organisation de conferences lors de la Fete de la autre texte science')
     soup_wrapped, textdiff = html_diff_wrapper.render_html_diff(text1, result, 'modif')
     result = html_diff_wrapper.soup_to_text(soup_wrapped)
     #1 modif (accepted modif)
     self.assertEqual(result, 'Organisation de conferences lors de la Fete de la <span id="modif"><ins>autre texte </ins></span>science')
Пример #15
0
    def start(self, context, request, appstruct, **kw):
        user = get_current()
        source = appstruct['source']
        targets = appstruct['targets']
        if can_access(user, source) and all(
                can_access(user, target) for target in targets):
            diff_bodies = {}
            source_view = renderers.render(source.templates.get('diff', None),
                                           {'object': source}, request)

            for target in targets:
                target_view = renderers.render(
                    target.templates.get('diff', None), {'object': target},
                    request)
                soupt, textdiff = html_diff_wrapper.render_html_diff(
                    source_view, target_view)
                diff_bodies[target] = (textdiff, get_oid(target))

            return {'context_view': source_view, 'contents': diff_bodies}

        return {}
    def test_different_treatments_in_one_sentence(self):
        text1 = "fete de la science.Organiser des animations lors de la Fete de la science qui se deroule au mois d'octobre. Programme: - conferences - expositions - autres"
        text2 = "Fete de la science. Organiser des animations lors de la Fete de la science qui se deroule au mois du 24/09/2014 au 19/10/2014. Programme: - conferences - expositions - autres"
        soup, textdiff = html_diff_wrapper.render_html_diff(text1, text2, 'modif')

        spanids_data = []
        spans = soup.find_all('span', {'id': "modif"})
        descriminator = 1
        for span in spans:
            span['data-item'] = str(descriminator)
            descriminator += 1

        fselection = self._include_spanids(spans[0:2], "del", "ins")
        for span in fselection:
             spanids_data.append(span)

        lselection = self._include_spanids(spans[2:], "ins", "del")
        for span in lselection:
             spanids_data.append(span)

        html_diff_wrapper.unwrap_diff(spanids_data, soup)
        soup_to_text = html_diff_wrapper.soup_to_text(soup)
        self.assertEqual(soup_to_text, "Fete de la science. Organiser des animations lors de la Fete de la science qui se deroule au mois d'octobre. Programme: - conferences - expositions - autres")
Пример #17
0
    def update(self):
        result = {}
        site = get_site_folder(True, self.request)
        user = get_current(self.request)
        is_manager = has_any_roles(
            user=user,
            roles=('Admin', ('SiteAdmin', site))) or\
            is_site_moderator(self.request)
        duplicates = find_duplicates_artist(self.context,
                                            self.duplicates_state)
        diff_bodies = {}
        context_view = self.content(args={'object': self.context},
                                    template=self.context.templates.get(
                                        'diff', None))['body']

        for duplicate in duplicates:
            duplicate_view = self.content(args={'object': duplicate},
                                          template=duplicate.templates.get(
                                              'diff', None))['body']
            soupt, textdiff = html_diff_wrapper.render_html_diff(
                context_view, duplicate_view)
            diff_bodies[duplicate] = (textdiff, get_oid(duplicate))

        values = {
            'context': self.context,
            'oid': get_oid(self.context),
            'context_view': context_view,
            'contents': diff_bodies,
            'row_len': math.ceil(len(diff_bodies) / 2),
            'is_manager': is_manager,
            'view': self
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Пример #18
0
def get_text_amendment_diff(proposal, amendment):
    soup, textdiff = html_diff_wrapper.render_html_diff(
        getattr(proposal, 'text', ''),
        getattr(amendment, 'text', ''))
    return textdiff
Пример #19
0
def get_text_amendment_diff(proposal, amendment):
    soup, textdiff = html_diff_wrapper.render_html_diff(
        getattr(proposal, 'text', ''), getattr(amendment, 'text', ''))
    return textdiff
 def _entry_to_result(self, text1, text2, decision):
     soup_wrapped, textdiff = html_diff_wrapper.render_html_diff(text1, text2, 'modif')
     self._unwrap_spans('modif', decision, soup_wrapped)
     soup_to_text = html_diff_wrapper.soup_to_text(soup_wrapped)
     return soup_to_text
Пример #21
0
 def _entry_to_result(self, text1, text2, decision):
     soup_wrapped, textdiff = html_diff_wrapper.render_html_diff(
         text1, text2, 'modif')
     self._unwrap_spans('modif', decision, soup_wrapped)
     soup_to_text = html_diff_wrapper.soup_to_text(soup_wrapped)
     return soup_to_text