@@ -1119,7 +1119,7 @@ def _make_aggregate_rules(cls, aggregate):
1119
1119
return _aggregate_rules
1120
1120
1121
1121
@classmethod
1122
- def _stat_aggregate (cls , vos , aggregate , page , allow_disk_use ):
1122
+ def _stat_aggregate (cls , vos , aggregate , page , allow_disk_use , return_type ):
1123
1123
result = {}
1124
1124
pipeline = []
1125
1125
_aggregate_rules = cls ._make_aggregate_rules (aggregate )
@@ -1148,8 +1148,12 @@ def _stat_aggregate(cls, vos, aggregate, page, allow_disk_use):
1148
1148
cursor = vos .aggregate (pipeline , allowDiskUse = True )
1149
1149
else :
1150
1150
cursor = vos .aggregate (pipeline )
1151
- result ["results" ] = cls ._make_aggregate_values (cursor )
1152
- return result
1151
+
1152
+ if return_type == "cursor" :
1153
+ return cursor
1154
+ else :
1155
+ result ["results" ] = cls ._make_aggregate_values (cursor )
1156
+ return result
1153
1157
1154
1158
@classmethod
1155
1159
def _stat_distinct (cls , vos , distinct , page ):
@@ -1184,6 +1188,7 @@ def stat(
1184
1188
reference_filter = None ,
1185
1189
target = "SECONDARY_PREFERRED" ,
1186
1190
allow_disk_use = False ,
1191
+ return_type = "dict" ,
1187
1192
** kwargs ,
1188
1193
):
1189
1194
filter = filter or []
@@ -1199,7 +1204,9 @@ def stat(
1199
1204
vos = cls ._get_target_objects (target ).filter (_filter )
1200
1205
1201
1206
if aggregate :
1202
- return cls ._stat_aggregate (vos , aggregate , page , allow_disk_use )
1207
+ return cls ._stat_aggregate (
1208
+ vos , aggregate , page , allow_disk_use , return_type
1209
+ )
1203
1210
1204
1211
elif distinct :
1205
1212
return cls ._stat_distinct (vos , distinct , page )
@@ -1499,6 +1506,7 @@ def analyze(
1499
1506
reference_filter = None ,
1500
1507
target = "SECONDARY_PREFERRED" ,
1501
1508
allow_disk_use = False ,
1509
+ return_type = "dict" ,
1502
1510
** kwargs ,
1503
1511
):
1504
1512
if fields is None :
@@ -1540,6 +1548,7 @@ def analyze(
1540
1548
"aggregate" : aggregate ,
1541
1549
"target" : target ,
1542
1550
"allow_disk_use" : allow_disk_use ,
1551
+ "return_type" : return_type ,
1543
1552
"reference_filter" : reference_filter ,
1544
1553
}
1545
1554
@@ -1561,8 +1570,11 @@ def analyze(
1561
1570
1562
1571
response = cls .stat (** query )
1563
1572
1564
- if page_limit :
1565
- response ["more" ] = len (response ["results" ]) > page_limit
1566
- response ["results" ] = response ["results" ][:page_limit ]
1573
+ if return_type == "cursor" :
1574
+ return response
1575
+ else :
1576
+ if page_limit :
1577
+ response ["more" ] = len (response ["results" ]) > page_limit
1578
+ response ["results" ] = response ["results" ][:page_limit ]
1567
1579
1568
- return response
1580
+ return response
0 commit comments