Cannot use field type twice #34

Closed
opened 2022-01-02 00:00:56 +01:00 by nik · 6 comments
Owner

Trying to import two phone numbers, one into phone_number and one into mobile, fails, because the field type is used as column name when calling Pandas.

Exception:

[2022-01-01 22:58:31,711: ERROR/ForkPoolWorker-1] Task aleksis.apps.csv_import.util.process.import_csv[60fb9044-10d7-4d5d-a0c3-fde4fd6df2eb] raised unexpected: IntegrityError('duplicate key value violates unique constraint "django_celery_results_taskresult_task_id_key"\nDETAIL:  Key (task_id)=(60fb9044-10d7-4d5d-a0c3-fde4fd6df2eb) already exists.\n')
Traceback (most recent call last):
  File "/home/nik/AlekSIS/AlekSIS/apps/official/AlekSIS-App-CSVImport/.venv/lib/python3.9/site-packages/celery/app/trace.py", line 409, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/home/nik/AlekSIS/AlekSIS/apps/official/AlekSIS-App-CSVImport/.venv/lib/python3.9/site-packages/celery/app/trace.py", line 701, in __protected_call__
    return self.run(*args, **kwargs)
  File "/home/nik/AlekSIS/AlekSIS/apps/official/AlekSIS-App-CSVImport/.venv/lib/python3.9/site-packages/aleksis/core/util/celery_progress.py", line 158, in _inject_recorder
    return orig(*args, **kwargs, recorder=recorder)
  File "/home/nik/AlekSIS/AlekSIS/apps/official/AlekSIS-App-CSVImport/aleksis/apps/csv_import/util/process.py", line 62, in import_csv
    data = pandas.read_csv(
  File "/home/nik/AlekSIS/AlekSIS/apps/official/AlekSIS-App-CSVImport/.venv/lib/python3.9/site-packages/pandas/util/_decorators.py", line 311, in wrapper
    return func(*args, **kwargs)
  File "/home/nik/AlekSIS/AlekSIS/apps/official/AlekSIS-App-CSVImport/.venv/lib/python3.9/site-packages/pandas/io/parsers/readers.py", line 586, in read_csv
    return _read(filepath_or_buffer, kwds)
  File "/home/nik/AlekSIS/AlekSIS/apps/official/AlekSIS-App-CSVImport/.venv/lib/python3.9/site-packages/pandas/io/parsers/readers.py", line 479, in _read
    _validate_names(kwds.get("names", None))
  File "/home/nik/AlekSIS/AlekSIS/apps/official/AlekSIS-App-CSVImport/.venv/lib/python3.9/site-packages/pandas/io/parsers/readers.py", line 460, in _validate_names
    raise ValueError("Duplicate names are not allowed.")
ValueError: Duplicate names are not allowed.

Template snippet:

    - field_type: phone_number                                                                                                                         
      db_field: mobile                                                                                                                                 
    - phone_number

The db_field should be overridable for all field types. Probably, args should simply be loaded verbatim and set on the class (using setattr) verbatim.

Trying to import two phone numbers, one into `phone_number` and one into `mobile`, fails, because the field type is used as column name when calling Pandas. Exception: ```plain [2022-01-01 22:58:31,711: ERROR/ForkPoolWorker-1] Task aleksis.apps.csv_import.util.process.import_csv[60fb9044-10d7-4d5d-a0c3-fde4fd6df2eb] raised unexpected: IntegrityError('duplicate key value violates unique constraint "django_celery_results_taskresult_task_id_key"\nDETAIL: Key (task_id)=(60fb9044-10d7-4d5d-a0c3-fde4fd6df2eb) already exists.\n') Traceback (most recent call last): File "/home/nik/AlekSIS/AlekSIS/apps/official/AlekSIS-App-CSVImport/.venv/lib/python3.9/site-packages/celery/app/trace.py", line 409, in trace_task R = retval = fun(*args, **kwargs) File "/home/nik/AlekSIS/AlekSIS/apps/official/AlekSIS-App-CSVImport/.venv/lib/python3.9/site-packages/celery/app/trace.py", line 701, in __protected_call__ return self.run(*args, **kwargs) File "/home/nik/AlekSIS/AlekSIS/apps/official/AlekSIS-App-CSVImport/.venv/lib/python3.9/site-packages/aleksis/core/util/celery_progress.py", line 158, in _inject_recorder return orig(*args, **kwargs, recorder=recorder) File "/home/nik/AlekSIS/AlekSIS/apps/official/AlekSIS-App-CSVImport/aleksis/apps/csv_import/util/process.py", line 62, in import_csv data = pandas.read_csv( File "/home/nik/AlekSIS/AlekSIS/apps/official/AlekSIS-App-CSVImport/.venv/lib/python3.9/site-packages/pandas/util/_decorators.py", line 311, in wrapper return func(*args, **kwargs) File "/home/nik/AlekSIS/AlekSIS/apps/official/AlekSIS-App-CSVImport/.venv/lib/python3.9/site-packages/pandas/io/parsers/readers.py", line 586, in read_csv return _read(filepath_or_buffer, kwds) File "/home/nik/AlekSIS/AlekSIS/apps/official/AlekSIS-App-CSVImport/.venv/lib/python3.9/site-packages/pandas/io/parsers/readers.py", line 479, in _read _validate_names(kwds.get("names", None)) File "/home/nik/AlekSIS/AlekSIS/apps/official/AlekSIS-App-CSVImport/.venv/lib/python3.9/site-packages/pandas/io/parsers/readers.py", line 460, in _validate_names raise ValueError("Duplicate names are not allowed.") ValueError: Duplicate names are not allowed. ``` Template snippet: ```yaml - field_type: phone_number db_field: mobile - phone_number ``` The `db_field` should be overridable for all field types. Probably, args should simply be loaded verbatim and set on the class (using setattr) verbatim.
Author
Owner

assigned to @hansegucker

assigned to @hansegucker
Author
Owner

mentioned in merge request !139

mentioned in merge request !139
Author
Owner

changed the description

changed the description
Owner

created merge request !146 to address this issue

created merge request !146 to address this issue
Owner

mentioned in merge request !146

mentioned in merge request !146
Author
Owner

mentioned in commit f00523a89c

mentioned in commit f00523a89ce1ad1961c89824ba37bda02e453b84
nik closed this issue 2022-01-08 17:01:00 +01:00
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
aleksis/AlekSIS-App-CSVImport#34
No description provided.