- Notifications
You must be signed in to change notification settings - Fork 76
Closed
Description
Hello,
I have a piece of code searching for records that DO NOT have a certain attribute, in the following way:
match = dict( canceled = None, #...some other stuff ) cursor = self.tx.collection('Whatever').find(match)
This was working fine up to a while ago. Today a customer called me saying that a feature wasn't working. I had just upgraded to the latest version of python arango, and using a previous version the bug didn't appear (I know, I should have tests in place, I'll get to them someday 😓).
The error is the following:
arango.exceptions.DocumentGetError: [HTTP 400][ERR 1501] AQL: syntax error, unexpected none modifier near 'None\n LIMIT 0, nu...' at position 3:69 (while parsing)
I looked weird that it mentioned a query. I checked the python-arango code and noticed that in the latest release the code for find
changed in 022afc2 from this:
data: Json = { "collection": self.name, "example": filters, "skip": skip, } if limit is not None: data["limit"] = limit request = Request( method="put", endpoint="/_api/simple/by-example", data=data, read=self.name ) def response_handler(resp: Response) -> Cursor: if not resp.is_success: raise DocumentGetError(resp, request) return Cursor(self._conn, resp.body) return self._execute(request, response_handler)
to this
skip_val = skip if skip is not None else 0 limit_val = limit if limit is not None else "null" query = f""" FOR doc IN @@collection {build_filter_conditions(filters)} LIMIT {skip_val}, {limit_val} RETURN doc """ bind_vars = {"@collection": self.name} request = Request( method="post", endpoint="/_api/cursor", data={"query": query, "bindVars": bind_vars, "count": True}, read=self.name, headers={"x-arango-allow-dirty-read": "true"} if allow_dirty_read else None, ) def response_handler(resp: Response) -> Cursor: if not resp.is_success: raise DocumentGetError(resp, request) return Cursor(self._conn, resp.body) return self._execute(request, response_handler)
@aMahanna: Is this a regression or dict(attribute=None)
as filter is not meant to work? In the second case, is there any other solution or workaround?
Metadata
Metadata
Assignees
Labels
No labels