@@ -34,19 +34,26 @@ endpoints.forEach(function(endpoint) {
34
34
const hasGetMany = method .name === ' get_list'
35
35
const pythonMethodName = generate_method_name (method .name , path)
36
36
37
- let queries = []
37
+ const queriesWithNames = []
38
38
if (method .query ) {
39
- queries .push (method .query )
39
+ queriesWithNames .push ({ " result" : method .query })
40
+ } else if (method .aggregated_queries ) {
41
+ for (const [key , value ] of Object .entries (method .aggregated_queries )) {
42
+ queriesWithNames .push ({ [key]: value })
43
+ }
40
44
}
41
45
42
- queries = queries .map (query => {
43
- const sql = convertToPsycopgNamedArguments (formatQuery (query))
44
- const params = extractParamsFromQuery (query);
45
- const formattedParams = params .length > 0
46
- // [ "p.categoryId" ] => [ '"categoryId": categoryId' ]
47
- ? ' , { ' + params .map (param => param .substring (2 )).map (param => ` "${ param} ": ${ param} ` ).join (' , ' ) + ' }'
48
- : ' '
49
- return ({ sql : sql, formattedParams: formattedParams })
46
+ const queries = []
47
+ queriesWithNames .forEach (queryWithName => {
48
+ for (const [name , query ] of Object .entries (queryWithName)) {
49
+ const sql = convertToPsycopgNamedArguments (formatQuery (query))
50
+ const params = extractParamsFromQuery (query);
51
+ const formattedParams = params .length > 0
52
+ // [ "p.categoryId" ] => [ '"categoryId": categoryId' ]
53
+ ? ' , { ' + params .map (param => param .substring (2 )).map (param => ` "${ param} ": ${ param} ` ).join (' , ' ) + ' }'
54
+ : ' '
55
+ queries .push ({ [name]: { sql : sql, formattedParams: formattedParams }})
56
+ }
50
57
})
51
58
52
59
if (hasGetOne || hasGetMany) {
@@ -62,14 +69,29 @@ def <%- pythonMethodName %>(<%- paramsFromPath.join(', ') %>):
62
69
port = 5432 )
63
70
try:
64
71
with conn:
72
+ < % if (queries .length > 1 ) { /* we can omit cursor_factory but in this case we might get an unused import */ -% >
73
+ with conn .cursor (cursor_factory = psycopg2 .extras .DictCursor ) as cur:
74
+ result = {}
75
+ < % queries .forEach (queryInfo => {
76
+ for (const [name , query ] of Object .entries (queryInfo)) {
77
+ -% >
78
+ cur .execute (' <%- query.sql %>' < %- query .formattedParams % > )
79
+ result[' <%- name %>' ] = cur .fetchone ()[0 ]
80
+ < % }
81
+ })
82
+ -% >
83
+ return result
84
+ < %
85
+ } else {
86
+ const query = queries[0 ].result
87
+ -% >
65
88
with conn .cursor (cursor_factory = psycopg2 .extras .RealDictCursor ) as cur:
66
- < % queries .forEach (query => { -% >
67
89
cur .execute (' <%- query.sql %>' < %- query .formattedParams % > )
68
90
result = cur .fetchone ()
69
91
if result is None:
70
92
raise HTTPException (status_code= 404 )
71
93
return result
72
- < % }) -% >
94
+ < % } -% >
73
95
finally:
74
96
conn .close ()
75
97
< %
0 commit comments