mirror of
https://github.com/jazzband/django-ddp.git
synced 2026-05-24 23:23:48 +00:00
Merge branch 'feature/django18' into develop
This commit is contained in:
commit
6f8d68a10c
3 changed files with 30 additions and 12 deletions
20
dddp/api.py
20
dddp/api.py
|
|
@ -12,7 +12,10 @@ 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
|
||||
try:
|
||||
from django.db.models.expressions import ExpressionNode
|
||||
except ImportError:
|
||||
from django.db.models import Expression as ExpressionNode
|
||||
from django.db.models.sql import aggregates as sql_aggregates
|
||||
from django.utils.encoding import force_text
|
||||
from django.db import DatabaseError
|
||||
|
|
@ -48,6 +51,7 @@ class Array(aggregates.Aggregate):
|
|||
"""Array aggregate function."""
|
||||
|
||||
func = 'ARRAY'
|
||||
function = 'array_agg'
|
||||
name = 'Array'
|
||||
|
||||
def add_to_query(self, query, alias, col, source, is_summary):
|
||||
|
|
@ -64,9 +68,17 @@ class Array(aggregates.Aggregate):
|
|||
return 'ArrayType'
|
||||
|
||||
new_source = ArrayField()
|
||||
super(Array, self).add_to_query(
|
||||
query, alias, col, new_source, is_summary,
|
||||
)
|
||||
try:
|
||||
super(Array, self).add_to_query(
|
||||
query, alias, col, new_source, is_summary,
|
||||
)
|
||||
except AttributeError:
|
||||
query.aggregates[alias] = new_source
|
||||
|
||||
def convert_value(self, value, expression, connection, context):
|
||||
if not value:
|
||||
return []
|
||||
return value
|
||||
|
||||
|
||||
def api_endpoint(path_or_func):
|
||||
|
|
|
|||
18
dddp/msg.py
18
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)
|
||||
|
|
|
|||
4
setup.py
4
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',
|
||||
|
|
|
|||
Loading…
Reference in a new issue