22
22
from db_client .models .organisation .users import Organisation
23
23
from sqlalchemy import Column , and_
24
24
from sqlalchemy import delete as db_delete
25
- from sqlalchemy import desc , func , or_
25
+ from sqlalchemy import desc , or_
26
26
from sqlalchemy import update as db_update
27
27
from sqlalchemy .exc import NoResultFound , OperationalError
28
28
from sqlalchemy .orm import Query , Session
34
34
35
35
_LOGGER = logging .getLogger (__name__ )
36
36
37
- FamilyGeoMetaOrg = Tuple [Family , str , FamilyMetadata , Corpus , Organisation ]
37
+ FamilyGeoMetaOrg = Tuple [Family , Geography , FamilyMetadata , Corpus , Organisation ]
38
38
39
39
40
40
def _get_query (db : Session ) -> Query :
41
41
# NOTE: SqlAlchemy will make a complete hash of query generation
42
42
# if columns are used in the query() call. Therefore, entire
43
43
# objects are returned.
44
- geo_subquery = (
45
- db .query (
46
- func .min (Geography .value ).label ("value" ),
47
- FamilyGeography .family_import_id ,
48
- )
49
- .join (FamilyGeography , FamilyGeography .geography_id == Geography .id )
50
- .filter (FamilyGeography .family_import_id == Family .import_id )
51
- .group_by (Geography .value , FamilyGeography .family_import_id )
52
- ).subquery ("geo_subquery" )
53
-
54
44
return (
55
- db .query (Family , geo_subquery .c .value , FamilyMetadata , Corpus , Organisation ) # type: ignore
45
+ db .query (Family , Geography , FamilyMetadata , Corpus , Organisation ) # type: ignore
46
+ .join (FamilyGeography , FamilyGeography .family_import_id == Family .import_id )
47
+ .join (
48
+ Geography ,
49
+ Geography .id == FamilyGeography .geography_id ,
50
+ )
56
51
.join (FamilyMetadata , FamilyMetadata .family_import_id == Family .import_id )
57
52
.join (FamilyCorpus , FamilyCorpus .family_import_id == Family .import_id )
58
53
.join (Corpus , Corpus .import_id == FamilyCorpus .corpus_import_id )
59
54
.join (Organisation , Corpus .organisation_id == Organisation .id )
60
- .filter (geo_subquery .c .family_import_id == Family .import_id ) # type: ignore
61
55
)
62
56
63
57
@@ -72,7 +66,7 @@ def _family_to_dto(
72
66
import_id = str (fam .import_id ),
73
67
title = str (fam .title ),
74
68
summary = str (fam .description ),
75
- geography = geo_value ,
69
+ geographies = [ str ( geo_value . display_value )] ,
76
70
category = str (fam .family_category ),
77
71
status = str (fam .family_status ),
78
72
metadata = metadata ,
@@ -201,13 +195,9 @@ def search(
201
195
term = f"%{ escape_like (search_params ['summary' ])} %"
202
196
search .append (Family .description .ilike (term ))
203
197
204
- if "geography" in search_params .keys ():
205
- term = cast (str , search_params ["geography" ])
206
- search .append (
207
- or_ (
208
- Geography .display_value == term .title (), Geography .value == term .upper ()
209
- )
210
- )
198
+ if "geographies" in search_params .keys ():
199
+ term = cast (str , search_params ["geographies" ])
200
+ search .append (Geography .display_value == term .title ())
211
201
212
202
if "status" in search_params .keys ():
213
203
term = cast (str , search_params ["status" ])
0 commit comments