Coverage for bbconf/models/bed_models.py: 100%

116 statements  

« prev     ^ index     » next       coverage.py v7.6.0, created at 2024-07-17 04:01 +0000

1import datetime 

2from typing import List, Optional, Union 

3 

4from pydantic import BaseModel, ConfigDict, Field 

5 

6from .base_models import FileModel 

7from bbconf.const import DEFAULT_LICENSE 

8 

9 

10class BedPlots(BaseModel): 

11 chrombins: FileModel = None 

12 gccontent: FileModel = None 

13 partitions: FileModel = None 

14 expected_partitions: FileModel = None 

15 cumulative_partitions: FileModel = None 

16 widths_histogram: FileModel = None 

17 neighbor_distances: FileModel = None 

18 open_chromatin: FileModel = None 

19 

20 model_config = ConfigDict(extra="ignore") 

21 

22 

23class BedFiles(BaseModel): 

24 bed_file: Union[FileModel, None] = None 

25 bigbed_file: Union[FileModel, None] = None 

26 

27 model_config = ConfigDict( 

28 populate_by_name=True, 

29 extra="ignore", 

30 ) 

31 

32 

33class BedClassification(BaseModel): 

34 name: Optional[str] = None 

35 genome_alias: str = None 

36 genome_digest: Union[str, None] = None 

37 bed_type: str = Field( 

38 default="bed3", pattern="^bed(?:[3-9]|1[0-5])(?:\+|$)[0-9]?+$" 

39 ) 

40 bed_format: str = None 

41 

42 model_config = ConfigDict(extra="ignore") 

43 

44 

45class BedStatsModel(BaseModel): 

46 number_of_regions: Optional[float] = Field(None, alias="regions_no") 

47 gc_content: Optional[float] = None 

48 median_tss_dist: Optional[float] = None 

49 mean_region_width: Optional[float] = None 

50 

51 exon_frequency: Optional[float] = None 

52 exon_percentage: Optional[float] = None 

53 

54 intron_frequency: Optional[float] = None 

55 intron_percentage: Optional[float] = None 

56 

57 intergenic_percentage: Optional[float] = None 

58 intergenic_frequency: Optional[float] = None 

59 

60 promotercore_frequency: Optional[float] = None 

61 promotercore_percentage: Optional[float] = None 

62 

63 fiveutr_frequency: Optional[float] = None 

64 fiveutr_percentage: Optional[float] = None 

65 

66 threeutr_frequency: Optional[float] = None 

67 threeutr_percentage: Optional[float] = None 

68 

69 promoterprox_frequency: Optional[float] = None 

70 promoterprox_percentage: Optional[float] = None 

71 

72 model_config = ConfigDict(extra="ignore", populate_by_name=True) 

73 

74 

75class BedPEPHub(BaseModel): 

76 sample_name: str 

77 genome: str = "" 

78 organism: str = "" 

79 species_id: str = "" 

80 cell_type: str = "" 

81 cell_line: str = "" 

82 exp_protocol: str = Field("", description="Experimental protocol (e.g. ChIP-seq)") 

83 library_source: str = Field( 

84 "", description="Library source (e.g. genomic, transcriptomic)" 

85 ) 

86 genotype: str = Field("", description="Genotype of the sample") 

87 target: str = Field("", description="Target of the assay (e.g. H3K4me3)") 

88 antibody: str = Field("", description="Antibody used in the assay") 

89 treatment: str = Field( 

90 "", description="Treatment of the sample (e.g. drug treatment)" 

91 ) 

92 tissue: str = Field("", description="Tissue type") 

93 global_sample_id: str = Field("", description="Global sample identifier") 

94 global_experiment_id: str = Field("", description="Global experiment identifier") 

95 description: str = Field("", description="Description of the sample") 

96 

97 model_config = ConfigDict(extra="allow", populate_by_name=True) 

98 

99 

100class BedPEPHubRestrict(BedPEPHub): 

101 

102 model_config = ConfigDict(extra="ignore") 

103 

104 

105class BedMetadataBasic(BedClassification): 

106 id: str 

107 name: Optional[Union[str, None]] = "" 

108 description: Optional[str] = None 

109 submission_date: datetime.datetime = None 

110 last_update_date: Optional[datetime.datetime] = None 

111 is_universe: Optional[bool] = False 

112 license_id: Optional[str] = DEFAULT_LICENSE 

113 

114 

115class UniverseMetadata(BaseModel): 

116 construct_method: Union[str, None] = None 

117 bedset_id: Union[str, None] = None 

118 

119 

120class BedSetMinimal(BaseModel): 

121 id: str 

122 name: Union[str, None] = None 

123 description: Union[str, None] = None 

124 

125 

126class BedMetadata(BedMetadataBasic): 

127 stats: Union[BedStatsModel, None] = None 

128 plots: Union[BedPlots, None] = None 

129 files: Union[BedFiles, None] = None 

130 universe_metadata: Union[UniverseMetadata, None] = None 

131 raw_metadata: Union[BedPEPHub, BedPEPHubRestrict, None] = None 

132 bedsets: Union[List[BedSetMinimal], None] = None 

133 

134 

135class BedListResult(BaseModel): 

136 count: int 

137 limit: int 

138 offset: int 

139 results: List[BedMetadataBasic] 

140 

141 

142class QdrantSearchResult(BaseModel): 

143 id: str 

144 payload: dict 

145 score: float 

146 metadata: Union[BedMetadataBasic, None] = None 

147 

148 

149class BedListSearchResult(BaseModel): 

150 count: int 

151 limit: int 

152 offset: int 

153 results: List[QdrantSearchResult] = None 

154 

155 

156class TokenizedBedResponse(BaseModel): 

157 universe_id: str 

158 bed_id: str 

159 tokenized_bed: List[int] 

160 

161 

162class BedEmbeddingResult(BaseModel): 

163 identifier: str 

164 payload: dict 

165 embedding: List[float] 

166 

167 

168class TokenizedPathResponse(BaseModel): 

169 bed_id: str 

170 universe_id: str 

171 file_path: str 

172 endpoint_url: str