2626from api .models .popular_species import PopularSpeciesGroup
2727from api .models .karyotype import Karyotype
2828from api .models .genome import BriefGenomeDetails , GenomeDetails , DatasetAttributes , GenomeByKeyword , Release , \
29- GenomeGroupsResponse , GenomesInGroupResponse
29+ GenomeGroupsResponse , GenomesInGroupResponse , GenomeCountsResponse
3030from api .models .ftplinks import FTPLinks
3131from api .models .vep import VepFilePaths
3232
@@ -350,16 +350,16 @@ async def get_releases(
350350 return response_data
351351
352352@router .get ("/genome_groups" , name = "genome_groups" )
353- @redis_cache ("genome_groups" , arg_keys = ["group_type" , "release_label " ])
353+ @redis_cache ("genome_groups" , arg_keys = ["group_type" , "release " ])
354354async def get_genome_groups (
355355 group_type : str = Query (..., description = "Group type, e.g. 'structural_variant'" ),
356- release_label : str | None = Query (None , description = "Optional release label, e.g. '2025-02'" )
356+ release : str | None = Query (None , description = "Optional release label, e.g. '2025-02'" )
357357):
358358 try :
359359 genome_groups_dict = MessageToDict (
360360 grpc_client .get_genome_groups_with_reference (
361361 group_type = group_type ,
362- release_label = release_label
362+ release_label = release
363363 )
364364 )
365365 logging .debug (f"genome_groups_dict: { genome_groups_dict } " )
@@ -377,16 +377,16 @@ async def get_genome_groups(
377377 return response_error_handler ({"status" : 500 })
378378
379379@router .get ("/genome_groups/{group_id}/genomes" , name = "genomes_in_group" )
380- @redis_cache ("genomes_in_group" , arg_keys = ["group_id" , "release_label " ])
380+ @redis_cache ("genomes_in_group" , arg_keys = ["group_id" , "release " ])
381381async def get_genomes_in_group (
382382 group_id : str = Path (..., description = "Group ID, e.g. 'grch38-group'" ),
383- release_label : str | None = Query (None , description = "Optional release label, e.g. '2025-02'" )
383+ release : str | None = Query (None , description = "Optional release label, e.g. '2025-02'" )
384384):
385385 try :
386386 genomes_in_group_dict = MessageToDict (
387387 grpc_client .get_genomes_in_group (
388388 group_id = group_id ,
389- release_label = release_label
389+ release_label = release
390390 )
391391 )
392392 logging .debug (f"genomes_in_group_dict: { genomes_in_group_dict } " )
@@ -402,3 +402,20 @@ async def get_genomes_in_group(
402402 except Exception as ex :
403403 logging .exception ("Error in get_genomes_in_group" )
404404 return response_error_handler ({"status" : 500 })
405+
406+
407+ @router .get ("/genome_counts" , name = "genome_counts" )
408+ @redis_cache (key_prefix = "genome_counts" , arg_keys = ["release" ])
409+ async def get_genome_counts (
410+ release : str | None = Query (None , description = "Optional release label to filter counts, e.g. '2025-02'" )
411+ ):
412+ try :
413+ genome_counts_dict = MessageToDict (
414+ grpc_client .get_genome_counts (release_label = release )
415+ )
416+ genome_counts = GenomeCountsResponse (** genome_counts_dict )
417+ response_data = responses .JSONResponse (genome_counts .model_dump (), status_code = 200 )
418+ except Exception as ex :
419+ logging .exception ("Error in get_genome_counts" )
420+ return response_error_handler ({"status" : 500 })
421+ return response_data
0 commit comments