bradmontgomery/django-querycount

WHERE_CLAUSE_REGEX bad escape problem

Opened this issue · 2 comments

First of all: thanks so much for this module! I use it a shitload and it, basically, never lets me down. Appreciate it :)

I'm getting this little problemo with Django 4.2, Python 3.11, Psycopg 3.1.8:

Internal Server Error: /api/auth/login/
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/django/utils/deprecation.py", line 136, in __call__
    response = self.process_response(request, response)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/querycount/middleware.py", line 117, in process_response
    self._count_queries("response")
  File "/usr/local/lib/python3.11/site-packages/querycount/middleware.py", line 85, in _count_queries
    sql = self.WHERE_CLAUSE_REGEX.sub(
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/re/__init__.py", line 317, in _subx
    template = _compile_repl(template, pattern)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/re/__init__.py", line 308, in _compile_repl
    return _parser.parse_template(repl, pattern)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/re/_parser.py", line 1078, in parse_template
    raise s.error('bad escape %s' % this, len(this)) from None
re.error: bad escape \x at position 55

Not exactly sure what's causing this, but thought it might be worth posting an issue about. Maybe data changed in some way between Django 4.1 and 4.2?

I hit a nearly identical issue with a similar stack trace after a routine dependencies upgrade -- just a different escape character.

A common thread is that I also went from Django 4.1 => 4.2, so perhaps that is worth a closer look.

One thing that jumps out at me in the Django 4.2 release notes is that Django 4.2 requires an update to Postgres 12+. Perhaps some of the database dependencies that are triggered as part of that major version update are at the root of this issue.

https://docs.djangoproject.com/en/4.2/releases/4.2/#database-backend-api

Getting similar issue with Django 3.2, GeoDjango, Postgres with postgis extension for only queries like this:

from django.contrib.gis.geos import Point
from django.contrib.gis.measure import Distance  

lat = 52.5
lng = 1.0
radius = 10
point = Point(lng, lat)    
Place.objects.filter(location__distance_lt=(point, Distance(km=radius))) 

Screen Shot 2023-10-06 at 6 55 04 PM

Other ORM queries working fine.

https://gis.stackexchange.com/questions/141533/geodjango-find-all-points-within-radius