specify / specify7

Specify 7
https://www.specifysoftware.org/products/specify-7/
GNU General Public License v2.0
64 stars 36 forks source link

`ValueError` when validating a data set in the WorkBench #3006

Open grantfitzsimmons opened 1 year ago

grantfitzsimmons commented 1 year ago

"taskinfo": "ValueError(\"invalid literal for int() with base 10: 'Other'\")"

image

https://nbm-mnb.specifycloud.org/specify/workbench/10/

spadmin account

Able to recreate this issue when validating in the workbench

Similar to https://github.com/specify/specify7/issues/709

Full log:

ValueError: invalid literal for int() with base 10: 'Other'
[2023-02-16 15:54:56,074: ERROR/ForkPoolWorker-1] Task specifyweb.workbench.tasks.upload[6e60cf3b-b702-482b-8e24-e71cdeb113bd] raised unexpected: ValueError("invalid literal for int() with base 10: 'Other'")
Traceback (most recent call last):
  File "/opt/specify7/ve/lib/python3.8/site-packages/celery/app/trace.py", line 405, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/opt/specify7/ve/lib/python3.8/site-packages/celery/app/trace.py", line 697, in __protected_call__
    return self.run(*args, **kwargs)
  File "/opt/specify7/specifyweb/workbench/tasks.py", line 46, in upload
    do_upload_dataset(collection, uploading_agent_id, ds, no_commit, allow_partial, progress)
  File "/opt/specify7/specifyweb/workbench/upload/upload.py", line 125, in do_upload_dataset
    results = do_upload(collection, rows, upload_plan, uploading_agent_id, disambiguation, no_commit, allow_partial, progress)
  File "/opt/specify7/specifyweb/workbench/upload/upload.py", line 212, in do_upload
    result = UploadResult(bind_result, {}, {}) if isinstance(bind_result, ParseFailures) else bind_result.process_row()
  File "/opt/specify7/specifyweb/workbench/upload/upload_table.py", line 204, in process_row
    return self._handle_row(force_upload=False)
  File "/opt/specify7/specifyweb/workbench/upload/upload_table.py", line 261, in _handle_row
    match = self._match(model, toOneResults, toManyFilters, info)
  File "/opt/specify7/specifyweb/workbench/upload/upload_table.py", line 299, in _match
    reduce(lambda q, f: q.filter(**f),
  File "/opt/specify7/specifyweb/workbench/upload/upload_table.py", line 299, in <lambda>
    reduce(lambda q, f: q.filter(**f),
  File "/opt/specify7/ve/lib/python3.8/site-packages/django/db/models/query.py", line 892, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "/opt/specify7/ve/lib/python3.8/site-packages/django/db/models/query.py", line 910, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "/opt/specify7/ve/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1290, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "/opt/specify7/ve/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1315, in _add_q
    child_clause, needed_inner = self.build_filter(
  File "/opt/specify7/ve/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1251, in build_filter
    condition = self.build_lookup(lookups, col, value)
  File "/opt/specify7/ve/lib/python3.8/site-packages/django/db/models/sql/query.py", line 1116, in build_lookup
    lookup = lookup_class(lhs, rhs)
  File "/opt/specify7/ve/lib/python3.8/site-packages/django/db/models/lookups.py", line 20, in __init__
    self.rhs = self.get_prep_lookup()
  File "/opt/specify7/ve/lib/python3.8/site-packages/django/db/models/lookups.py", line 70, in get_prep_lookup
    return self.lhs.output_field.get_prep_value(self.rhs)
  File "/opt/specify7/ve/lib/python3.8/site-packages/django/db/models/fields/__init__.py", line 1825, in get_prep_value
    return int(value)
ValueError: invalid literal for int() with base 10: 'Other'
grantfitzsimmons commented 1 year ago

This error is caused by a picklist with a non-numeric value (Other was the invalid pick list value) being assigned to a java.lang.Byte field (referenceWorkType).

Thank you @chanulee1 for trying it out in debug for more info

emenslin commented 2 months ago

Can recreate in edge (7.9.6)