Coverage for bbconf/models/bedset_models.py: 98%

58 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-16 22:05 +0000

1import datetime 

2from typing import Optional 

3 

4from pydantic import BaseModel, ConfigDict, model_validator 

5 

6from .base_models import FileModel 

7from .bed_models import BedMetadataBasic, BedStatsModel 

8 

9 

10class BedSetStats(BaseModel): 

11 """Bedset statistics: mean/sd of scalar columns. 

12 

13 Populated from bedset_means and bedset_standard_deviation database columns. 

14 """ 

15 

16 mean: BedStatsModel = None 

17 sd: BedStatsModel = None 

18 

19 

20class BedSetDistributions(BaseModel): 

21 """Collection-level aggregated distribution statistics for a bedset. 

22 

23 Stored in the bedset_stats JSONB database column. Populated when 

24 member bed files have been processed with the gtars analysis backend. 

25 """ 

26 

27 n_files: int = 0 

28 composition: Optional[dict] = None 

29 scalar_summaries: Optional[dict] = None 

30 tss_histogram: Optional[dict] = None 

31 widths_histogram: Optional[dict] = None 

32 neighbor_distances: Optional[dict] = None 

33 gc_content: Optional[dict] = None 

34 region_distribution: Optional[dict] = None 

35 partitions: Optional[dict] = None 

36 chromosome_summaries: Optional[dict] = None 

37 

38 

39class BedSetPlots(BaseModel): 

40 region_commonality: FileModel = None 

41 

42 model_config = ConfigDict(extra="ignore") 

43 

44 

45class BedSetMetadata(BaseModel): 

46 id: str 

47 name: str 

48 md5sum: str 

49 submission_date: datetime.datetime = None 

50 last_update_date: datetime.datetime = None 

51 statistics: BedSetStats | None = None 

52 distributions: BedSetDistributions | None = None 

53 plots: BedSetPlots | None = None 

54 description: str = None 

55 summary: str = None 

56 bed_ids: list[str] = None 

57 bedfile_count: int = 0 

58 author: str | None = None 

59 source: str | None = None 

60 

61 

62class BedSetListResult(BaseModel): 

63 count: int 

64 limit: int 

65 offset: int 

66 results: list[BedSetMetadata] 

67 

68 

69class BedSetBedFiles(BaseModel): 

70 count: int 

71 results: list[BedMetadataBasic] 

72 

73 

74class BedSetPEP(BaseModel): 

75 sample_name: str 

76 original_name: str 

77 genome_alias: str | None = "" 

78 genome_digest: str | None = "" 

79 bed_compliance: str | None = "" 

80 data_format: str | None = "" 

81 description: str | None = "" 

82 url: str | None = "" 

83 

84 @model_validator(mode="before") 

85 def remove_underscore_keys(cls, values): 

86 """ 

87 Remove keys that start with an underscore, as these values are not sorted by sqlalchemy 

88 """ 

89 return {k: v for k, v in values.items() if not k.startswith("_")} 

90 

91 model_config = ConfigDict(extra="allow")