diff options
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/data_importer.py | 4 | ||||
| -rw-r--r-- | ishtar_common/models.py | 1 | ||||
| -rw-r--r-- | ishtar_common/views.py | 54 | 
3 files changed, 34 insertions, 25 deletions
| diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py index 61fae2721..d4000b4c1 100644 --- a/ishtar_common/data_importer.py +++ b/ishtar_common/data_importer.py @@ -47,7 +47,8 @@ class ImportFormater(object):                   through_unicity_keys=None, duplicate_fields=[], regexp=None,                   regexp_formater_args=[], force_value=None,                   post_processing=False, concat=False, concat_str=False, -                 comment="", force_new=None, export_field_name=None): +                 comment="", force_new=None, export_field_name=None, +                 label=""):          self.field_name = field_name          if export_field_name:              self.export_field_name = export_field_name @@ -71,6 +72,7 @@ class ImportFormater(object):          self.concat_str = concat_str          self.comment = comment          self.force_new = force_new +        self.label = label      def reinit_db_target(self, db_target, nb=0):          if not self.formater: diff --git a/ishtar_common/models.py b/ishtar_common/models.py index f22600d12..a2341abdc 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -1830,6 +1830,7 @@ class ImporterType(models.Model):                  (field.field_name, field.force_new, field.concat,                   field.concat_str)                  for field in column.duplicate_fields.all()] +            formater_kwargs['label'] = column.label              formater_kwargs['required'] = column.required              formater_kwargs['force_new'] = force_news              if column.export_field_name: diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 94d754938..6a03f1f60 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -563,7 +563,8 @@ def get_item(model, func_name, default_name, extra_request_keys=[],      """      Generic treatment of tables      """ -    def func(request, data_type='json', full=False, force_own=False, **dct): +    def func(request, data_type='json', full=False, force_own=False, +             col_names=None, **dct):          # check rights          own = True  # more restrictive by default          allowed = False @@ -1098,28 +1099,32 @@ def get_item(model, func_name, default_name, extra_request_keys=[],              response['Content-Disposition'] = 'attachment; filename=%s'\                                                % filename              writer = csv.writer(response, **CSV_OPTIONS) -            col_names = [] -            for field_name in table_cols: -                if type(field_name) in (list, tuple): -                    field_name = u" & ".join(field_name) -                if hasattr(model, 'EXTRA_FULL_FIELDS_LABELS') and\ -                        field_name in model.EXTRA_FULL_FIELDS_LABELS: -                    field = model.EXTRA_FULL_FIELDS_LABELS[field_name] -                    col_names.append(unicode(field).encode(ENCODING)) -                    continue -                else: -                    try: -                        field = model._meta.get_field(field_name) -                    except: -                        col_names.append(u"".encode(ENCODING)) -                        logger.warning( -                            "**WARN get_item - csv export**: no col name for " -                            "{}\nadd explicit label to " -                            "EXTRA_FULL_FIELDS_LABELS attribute of " -                            "{}".format(field_name, model)) +            if col_names: +                col_names = [name.encode(ENCODING, errors='replace') +                             for name in col_names] +            else: +                col_names = [] +                for field_name in table_cols: +                    if type(field_name) in (list, tuple): +                        field_name = u" & ".join(field_name) +                    if hasattr(model, 'EXTRA_FULL_FIELDS_LABELS') and\ +                            field_name in model.EXTRA_FULL_FIELDS_LABELS: +                        field = model.EXTRA_FULL_FIELDS_LABELS[field_name] +                        col_names.append(unicode(field).encode(ENCODING))                          continue -                    col_names.append( -                        unicode(field.verbose_name).encode(ENCODING)) +                    else: +                        try: +                            field = model._meta.get_field(field_name) +                        except: +                            col_names.append(u"".encode(ENCODING)) +                            logger.warning( +                                "**WARN get_item - csv export**: no col name " +                                "for {}\nadd explicit label to " +                                "EXTRA_FULL_FIELDS_LABELS attribute of " +                                "{}".format(field_name, model)) +                            continue +                        col_names.append( +                            unicode(field.verbose_name).encode(ENCODING))              writer.writerow(col_names)              for data in datas:                  row, delta = [], 0 @@ -1149,15 +1154,16 @@ def get_by_importer(request, slug, data_type='json', full=False,              res = '{}'          return HttpResponse(res, mimetype='text/plain')      imp = q.all()[0].get_importer_class() -    cols = [] +    cols, col_names = [], []      for formater in imp.LINE_FORMAT:          if not formater:              continue          cols.append(formater.export_field_name) +        col_names.append(formater.label)      obj_name = imp.OBJECT_CLS.__name__.lower()      return get_item(          imp.OBJECT_CLS, 'get_' + obj_name, obj_name, own_table_cols=cols -    )(request, data_type, full, force_own, **dct) +    )(request, data_type, full, force_own, col_names=col_names, **dct)  def display_item(model, name, extra_dct=None): | 
