Hi, I have a custom method on my model manager that allows me to listen for notifications from modifications on the DB using postgreSQL. A short version of this code looks like this:
def listen_for_notify(self): import select import psycopg2 import psycopg2.extensions from django.conf import settings db_data = settings.DATABASES['default'] listened = None returned_empty = None search_timeout = 15 conn = psycopg2.connect(dbname=db_data['NAME'], user=db_data['USER'], password=db_data['PASSWORD'], host=db_data['HOST'], port=db_data['PORT']) conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) curs = conn.cursor() curs.execute("LISTEN default;") timeout = timezone.now() + timezone.timedelta(0, search_timeout) while timezone.now() < timeout: time_diff = timeout - timezone.now() if select.select([conn], [], [], float(time_diff.seconds)) == ([], [], []): listened = False timeout = timezone.now() else: conn.poll() while conn.notifies: notify = conn.notifies.pop(0) if notify.payload == "notified": listened = True returned_empty = False timeout = timezone.now() if notify.payload == 'search request returned empty': listened = True returned_empty = True timeout = timezone.now() curs.close() conn.close() return listened, returned_empty It would be really nice if instead of using the psycopg2 library, I could use only django.db. Something like this: def listen_for_notify(self): from django.db import connection as conn listened = None returned_empty = None search_timeout = 15 with conn.cursor() as curs timeout = timezone.now() + timezone.timedelta(0, search_timeout) while timezone.now() < timeout: time_diff = timeout - timezone.now() if select.select([conn], [], [], float(time_diff.seconds)) == ([], [], []): listened = False timeout = timezone.now() else: conn.poll() while conn.notifies: notify = conn.notifies.pop(0) if notify.payload == "notified": listened = True returned_empty = False timeout = timezone.now() if notify.payload == 'search request returned empty': listened = True returned_empty = True timeout = timezone.now() return listened, returned_empty I tried out the solution above using django.db, but it doesn't work because the django.db.connection object don't have a fileno() method. Is this currently not supported or am I missing something? I though that the django.db is kind of just a wrapper around the actual psycopg2 library. So I wonder why I can't use the fileno() method on it. -- You received this message because you are subscribed to the Google Groups "Django developers (Contributions to Django itself)" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-developers+unsubscr...@googlegroups.com. To post to this group, send email to django-developers@googlegroups.com. Visit this group at https://groups.google.com/group/django-developers. To view this discussion on the web visit https://groups.google.com/d/msgid/django-developers/b25d7b65-57d2-4547-9f3e-8ebfcb3641e6%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.