diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-04-06 13:38:16 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-04-06 13:39:15 +0200 | 
| commit | a129687cd2a776643770b9ba8f3bd9d8b53944a1 (patch) | |
| tree | 97602876d6d813bc6147246cb365780f12d8e3b3 /ishtar_common/views.py | |
| parent | 1e30f0bd210761722a6bf999124ac168af8e8d20 (diff) | |
| download | Ishtar-a129687cd2a776643770b9ba8f3bd9d8b53944a1.tar.bz2 Ishtar-a129687cd2a776643770b9ba8f3bd9d8b53944a1.zip | |
Step by step imports: general check of lines to filter only relevant lines (refs #3975)
Diffstat (limited to 'ishtar_common/views.py')
| -rw-r--r-- | ishtar_common/views.py | 76 | 
1 files changed, 59 insertions, 17 deletions
| diff --git a/ishtar_common/views.py b/ishtar_common/views.py index d4fb68004..2c2a6fe7e 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -1822,6 +1822,11 @@ class ImportListView(IshtarMixin, LoginRequiredMixin, ListView):                      imprt.delayed_importation(request.session.session_key)                  else:                      imprt.importation() +            elif action == 'CH': +                if settings.USE_BACKGROUND_TASK: +                    imprt.delayed_check_modified(request.session.session_key) +                else: +                    imprt.check_modified()              elif action == 'IS':                  if imprt.current_line is None:                      imprt.current_line = imprt.skip_lines @@ -1944,35 +1949,67 @@ class ImportStepByStepView(IshtarMixin, LoginRequiredMixin, TemplateView):          return super(ImportStepByStepView, self).get(request, *args, **kwargs)      def get_pagination(self, dct): -        pagination_step = 10 +        pagination_step = 5 +        only_modified = not self.kwargs.get('all_pages', False) +        dct['all'] = not only_modified +        dct['import_url'] = 'import_step_by_step' if only_modified else \ +            'import_step_by_step_all'          line_nb = self.imprt_obj.get_number_of_lines()          total_line_nb = self.imprt_obj.skip_lines + line_nb -        delta = int((self.current_line_number + 1) / pagination_step) +        delta = 0          already_imported = []          if self.imprt_obj.imported_line_numbers:              already_imported = self.imprt_obj.imported_line_numbers.split(',') +        changes = [] +        if self.imprt_obj.changed_line_numbers: +            changes = self.imprt_obj.changed_line_numbers.split(',')          dct['page_is_last'] = self.current_line_number == line_nb -        dct['page_numbers'] = []  # label, number, enabled, is_imported -        if delta > 0: -            dct['page_numbers'].append( -                (_(u"Previous"), delta * pagination_step - 1, True, False) +        # label, number, enabled, is_imported, has_changes +        dct['page_numbers'] = [] +        # first pass for the delta +        current = 0 +        for idx in range(self.imprt_obj.skip_lines, total_line_nb): +            imported = str(idx) in already_imported +            changed = str(idx) in changes +            if only_modified and (imported or not changed): +                continue +            current += 1 +            if idx == self.current_line_number - 1: +                delta = int(current / pagination_step) + +        current, has_next, previous = 0, False, None +        for idx in range(self.imprt_obj.skip_lines, total_line_nb): +            if current >= ((delta + 1) * pagination_step): +                has_next = idx +                break +            imported = str(idx) in already_imported +            changed = str(idx) in changes +            if only_modified and (imported or not changed): +                continue +            current += 1 +            if current <= (delta * pagination_step): +                previous = idx +                continue +            nb = idx + 1 +            dct['page_numbers'].append((nb, nb, True, imported, changed)) + +        if previous: +            dct['page_numbers'].insert(0, +                (_(u"Previous"), previous + 1, True, False, +                 True)              )          else: -            dct['page_numbers'].append( -                (_(u"Previous"), self.imprt_obj.skip_lines, False, False) +            dct['page_numbers'].insert(0, +                (_(u"Previous"), self.imprt_obj.skip_lines, False, False, True)              ) -        for idx in range(0, 10): -            nb = idx + delta * pagination_step -            if nb > self.imprt_obj.skip_lines and nb <= total_line_nb: -                imported = str(nb) in already_imported -                dct['page_numbers'].append((nb, nb, True, imported)) -        if nb + 1 <= total_line_nb: -            dct['page_numbers'].append((_(u"Next"), nb + 1, True, False)) +        if has_next: +            dct['page_numbers'].append((_(u"Next"), has_next + 1, True, False, +                                        True))          else:              dct['page_numbers'].append((_(u"Next"), total_line_nb, False, -                                        False)) +                                        False, True))      def get_context_data(self, **kwargs):          dct = super(ImportStepByStepView, self).get_context_data(**kwargs) @@ -2107,7 +2144,12 @@ class ImportStepByStepView(IshtarMixin, LoginRequiredMixin, TemplateView):                                                             old_and_updated)              updated_objects.append((label, obj, values, old_and_updated)) -        dct['have_change'] = main_changed +        dct['have_change'] = main_changed or self.imprt.new_objects +        if dct["have_change"]: +            self.imprt_obj.add_changed_line(self.current_line_number) +        else: +            self.imprt_obj.remove_changed_line(self.current_line_number) +          dct['updated_objects'] = []          dct['matched_objects'] = []          for path, obj, values, old_and_updated in updated_objects: | 
