From 2ad5e284526b2b2f55e50d5cf2cf293e990c5e80 Mon Sep 17 00:00:00 2001 From: Tyson Clugg Date: Fri, 12 Jun 2015 23:08:27 +1000 Subject: [PATCH] WIP on Django 1.8 compatibility. --- dddp/api.py | 20 +++++++++++++------- dddp/msg.py | 18 ++++++++++++------ setup.py | 4 ++-- 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/dddp/api.py b/dddp/api.py index 603748d..dfb4c81 100644 --- a/dddp/api.py +++ b/dddp/api.py @@ -11,8 +11,11 @@ import dbarray from django.conf import settings from django.contrib.auth import get_user_model from django.db import connection, connections -from django.db.models import aggregates, Q -from django.db.models.expressions import ExpressionNode +from django.db.models import aggregates, Q, Expression +try: + from django.db.models.expressions import ExpressionNode +except ImportError: + ExpressionNode = None from django.db.models.sql import aggregates as sql_aggregates from django.utils.encoding import force_text from django.db import DatabaseError @@ -353,11 +356,14 @@ class Collection(APIMixin): def serialize(self, obj, meteor_ids): """Generate a DDP msg for obj with specified msg type.""" - # check for F expressions - exps = [ - name for name, val in vars(obj).items() - if isinstance(val, ExpressionNode) - ] + if ExpressionNode is None: + exps = False + else: + # check for F expressions + exps = [ + name for name, val in vars(obj).items() + if isinstance(val, ExpressionNode) + ] if exps: # clone/update obj with values but only for the expression fields obj = deepcopy(obj) diff --git a/dddp/msg.py b/dddp/msg.py index 892f49f..4029b5b 100644 --- a/dddp/msg.py +++ b/dddp/msg.py @@ -1,16 +1,22 @@ """Django DDP utils for DDP messaging.""" from copy import deepcopy from dddp import THREAD_LOCAL as this, REMOVED -from django.db.models.expressions import ExpressionNode +try: + from django.db.models.expressions import ExpressionNode +except AttributeError: + ExpressionNode = None def obj_change_as_msg(obj, msg): """Generate a DDP msg for obj with specified msg type.""" - # check for F expressions - exps = [ - name for name, val in vars(obj).items() - if isinstance(val, ExpressionNode) - ] + if ExpressionNode is None: + exps = False + else: + # check for F expressions + exps = [ + name for name, val in vars(obj).items() + if isinstance(val, ExpressionNode) + ] if exps: # clone and update obj with values but only for the expression fields obj = deepcopy(obj) diff --git a/setup.py b/setup.py index 99d473e..32e4432 100644 --- a/setup.py +++ b/setup.py @@ -14,10 +14,10 @@ setup( packages=find_packages(), include_package_data=True, install_requires=[ - 'Django>=1.7,<1.8', + 'Django>=1.7', 'psycopg2>=2.5.4', 'gevent>=1.0', - 'gevent-websocket>=0.9', + 'gevent-websocket>=0.9,!=0.9.4', 'meteor-ejson>=1.0', 'psycogreen>=1.0', 'django-dbarray>=0.2',