30350n / inventree_part_import

CLI to import parts from suppliers like DigiKey, LCSC, Mouser, etc. to InvenTree
MIT License
28 stars 8 forks source link

Parentheses in manufacturer part name are not properly escaped #29

Closed ondras12345 closed 6 months ago

ondras12345 commented 6 months ago
$ inventree-part-import -v -o tme S2B-PH-SM4-TB
setting up InvenTree API ...
loading api configuration from 'inventree.yaml' ...
(only 2 of 5 available supplier modules are configured)
loading pre creation hooks ...
successfully loaded 1 pre creation hooks!
setting up categories ...
successfully setup categories!

searching for S2B-PH-SM4-TB ...
searching at TME ...
importing TME part S2B-PH-SM4-TB ...
error: failed to import part with: 
    error: OperationalError

    error_class: <class 'django.db.utils.OperationalError'>

    detail: Error details can be found in the admin panel

    path: /api/part/

    status_code: 500

FULL TRACEBACK:
Traceback (most recent call last):
  File "/home/ondra/.local/pipx/venvs/inventree-part-import/lib/python3.10/site-packages/inventree_part_import/part_importer.py", line 86, in import_part
    import_result |= self.import_supplier_part(supplier, api_part, existing_part)
  File "/home/ondra/.local/pipx/venvs/inventree-part-import/lib/python3.10/site-packages/inventree_part_import/part_importer.py", line 162, in import_supplier_part
    result = self.create_manufacturer_part(api_part, part)
  File "/home/ondra/.local/pipx/venvs/inventree-part-import/lib/python3.10/site-packages/inventree_part_import/part_importer.py", line 230, in create_manufacturer_part
    if part or (part := get_part(self.api, api_part.MPN)):
  File "/home/ondra/.local/pipx/venvs/inventree-part-import/lib/python3.10/site-packages/inventree_part_import/inventree_helpers.py", line 41, in get_part
    parts = Part.list(inventree_api, name_regex=f"^{name_sanitized}$")
  File "/home/ondra/.local/pipx/venvs/inventree-part-import/lib/python3.10/site-packages/inventree/base.py", line 203, in list
    response = api.get(url=url, params=kwargs)
  File "/home/ondra/.local/pipx/venvs/inventree-part-import/lib/python3.10/site-packages/inventree/api.py", line 530, in get
    response = self.request(url, method='get', **kwargs)
  File "/home/ondra/.local/pipx/venvs/inventree-part-import/lib/python3.10/site-packages/inventree_part_import/retries.py", line 68, in request
    return super().request(api_url, **kwargs)
  File "/home/ondra/.local/pipx/venvs/inventree-part-import/lib/python3.10/site-packages/inventree/api.py", line 378, in request
    raise requests.exceptions.HTTPError(detail)
requests.exceptions.HTTPError: {'detail': 'Error occurred during API request', 'url': 'http://inventree.rpi.lab.lan/api/part/', 'method': 'GET', 'status_code': 500, 'body': '{"error":"OperationalError","error_class":"<class \'django.db.utils.OperationalError\'>","detail":"Error details can be found in the admin panel","path":"/api/part/","status_code":500}', 'headers': {'AUTHORIZATION': 'Token [REDACTED]'}, 'params': {'name_regex': '^S2B-PH-SM4-TB \\(LF\\)(SN\\)$'}}

the following parts failed to import:
S2B-PH-SM4-TB

An error object is created in InvenTree:

django.db.utils.OperationalError: (1139, "Regex error 'missing closing parenthesis at offset 27'")

Part: https://www.tme.eu/en/details/s2b-ph-sm4-tb/raster-signal-connectors-2-00mm/jst/s2b-ph-sm4-tb-lf-sn/ (MPN: S2B-PH-SM4-TB (LF)(SN)) inventree_part_import version: 8b7dfbc1c7389f800e46e19c688213342d82589a

30350n commented 6 months ago

👍 Should be fixed.

ondras12345 commented 6 months ago

Thanks!