66from typing import Literal , override
77
88import web
9+ from typing_extensions import deprecated
910
1011from infogami .plugins .api .code import jsonapi
1112from infogami .utils import delegate
1213from infogami .utils .view import render_template , safeint
1314from openlibrary .core import cache
1415from openlibrary .plugins .upstream .utils import get_language_name
16+ from openlibrary .utils .async_utils import async_bridge
1517
1618from . import search , subjects
1719
@@ -39,22 +41,23 @@ def process_key(self, key):
3941 return key .replace ("_" , " " )
4042
4143
42- def get_top_languages (
44+ async def get_top_languages (
4345 limit : int ,
46+ user_lang : str ,
4447 sort : Literal ["count" , "name" , "ebook_edition_count" ] = "count" ,
4548) -> list [web .storage ]:
4649 available_edition_counts = dict (
47- get_all_language_counts ('edition' , ebook_access = "borrowable" )
50+ await get_all_language_counts ('edition' , ebook_access = "borrowable" )
4851 )
4952 results = [
5053 web .storage (
51- name = get_language_name (lang_key ),
54+ name = get_language_name (lang_key , user_lang ),
5255 key = lang_key ,
5356 marc_code = lang_key .split ('/' )[- 1 ],
5457 count = count ,
5558 ebook_edition_count = available_edition_counts .get (lang_key , 0 ),
5659 )
57- for (lang_key , count ) in get_all_language_counts ('work' )
60+ for (lang_key , count ) in await get_all_language_counts ('work' )
5861 ]
5962 results .sort (
6063 key = lambda x : x [sort ], reverse = sort in ("count" , "ebook_edition_count" )
@@ -63,7 +66,7 @@ def get_top_languages(
6366
6467
6568@cache .memoize ("memcache" , key = 'get_all_language_counts' , expires = 60 * 60 )
66- def get_all_language_counts (
69+ async def get_all_language_counts (
6770 solr_type : Literal ['work' , 'edition' ],
6871 ebook_access : str | None = None ,
6972) -> list [tuple [str , int ]]:
@@ -73,7 +76,7 @@ def get_all_language_counts(
7376 if ebook_access :
7477 ebook_access_query = f' AND ebook_access:[{ ebook_access } TO *]'
7578
76- result = search .get_solr ().select (
79+ result = await search .get_solr ().select_async (
7780 f'type:{ solr_type } { ebook_access_query } ' ,
7881 rows = 0 ,
7982 facets = ['language' ],
@@ -96,12 +99,16 @@ def GET(self):
9699 if sort not in ("count" , "name" , "ebook_edition_count" ):
97100 raise web .badrequest ("Invalid sort parameter" )
98101
99- return render_template ("languages/index" , get_top_languages (500 , sort = sort ))
102+ return render_template (
103+ "languages/index" ,
104+ async_bridge .run (get_top_languages (500 , user_lang = web .ctx .lang , sort = sort )),
105+ )
100106
101107 def is_enabled (self ):
102108 return True
103109
104110
111+ @deprecated ("migrated to fastapi" )
105112class index_json (delegate .page ):
106113 path = "/languages"
107114 encoding = "json"
@@ -112,7 +119,11 @@ def GET(self):
112119 limit = safeint (i .limit , 15 )
113120 if i .sort not in ("count" , "name" , "ebook_edition_count" ):
114121 raise web .badrequest ("Invalid sort parameter" )
115- return json .dumps (get_top_languages (limit , sort = i .sort ))
122+ return json .dumps (
123+ async_bridge .run (
124+ get_top_languages (limit , user_lang = web .ctx .lang , sort = i .sort )
125+ )
126+ )
116127
117128
118129class language_search (delegate .page ):
0 commit comments