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

116 statements  

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

1import datetime 

2 

3from pydantic import BaseModel, ConfigDict, Field 

4 

5from .drs_models import AccessMethod 

6 

7 

8class FileModel(BaseModel): 

9 name: str 

10 title: str | None = None 

11 path: str 

12 file_digest: str | None = None 

13 path_thumbnail: str | None = Field(None, alias="thumbnail_path") 

14 description: str | None = None 

15 size: int | None = None 

16 object_id: str | None = None 

17 access_methods: list[AccessMethod] | None = None 

18 

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

20 

21 

22class StatsReturn(BaseModel): 

23 bedfiles_number: int = 0 

24 bedsets_number: int = 0 

25 genomes_number: int = 0 

26 

27 

28class UsageStats(BaseModel): 

29 # file_downloads: Dict[str, int] # Placeholder for tracking file download statistics in the future. 

30 bed_metadata: dict[str, int] 

31 bedset_metadata: dict[str, int] 

32 bed_search_terms: dict[str, int] 

33 bedset_search_terms: dict[str, int] 

34 bed_downloads: dict[str, int] 

35 

36 

37class UsageModel(BaseModel): 

38 """ 

39 Usage model. Used to track usage of the bedbase. 

40 """ 

41 

42 bed_meta: dict[str, int] | None = None 

43 bedset_meta: dict[str, int] | None = None 

44 

45 bed_search: dict[str, int] | None = None 

46 bedset_search: dict[str, int] | None = None 

47 files: dict[str, int] | None = None 

48 

49 date_from: datetime.datetime 

50 date_to: datetime.datetime | None = None 

51 

52 

53class UsageItem(BaseModel): 

54 """ 

55 A single per-key usage count. 

56 """ 

57 

58 key: str 

59 count: int 

60 

61 

62class UsageResponse(BaseModel): 

63 """ 

64 Per-key usage counts for a single event type, optionally restricted to a 

65 date range. Returned by BedBaseAgent.get_usage. 

66 """ 

67 

68 event_type: str 

69 date_from: datetime.datetime | None = None 

70 date_to: datetime.datetime | None = None 

71 limit: int | None = None 

72 offset: int = 0 

73 count: int 

74 results: list[UsageItem] 

75 

76 

77class FileInfo(BaseModel): 

78 """ 

79 Main information about a file used for BEDbase verse statistics. 

80 """ 

81 

82 id: str 

83 bed_compliance: str 

84 data_format: str 

85 mean_region_width: float 

86 file_size: int 

87 number_of_regions: int 

88 

89 

90class AllFilesInfo(BaseModel): 

91 """ 

92 Information about all files. e.g. file sizes, mean region width, etc. 

93 

94 """ 

95 

96 total: int 

97 files: list[FileInfo] 

98 

99 

100class BinValues(BaseModel): 

101 bins: list[int | float | str] 

102 counts: list[int] 

103 mean: float 

104 median: float 

105 

106 

107class GEOStatistics(BaseModel): 

108 """ 

109 GEO statistics for files. 

110 """ 

111 

112 number_of_files: dict[str, int] 

113 cumulative_number_of_files: dict[str, int] 

114 file_sizes: BinValues 

115 

116 

117class FileStats(BaseModel): 

118 bed_compliance: dict[str, int] 

119 data_format: dict[str, int] 

120 file_genome: dict[str, int] 

121 file_organism: dict[str, int] 

122 file_assay: dict[str, int] 

123 cell_line: dict[str, int] 

124 geo_status: dict[str, int] 

125 bed_comments: dict[str, int] 

126 mean_region_width: BinValues 

127 file_size: BinValues 

128 number_of_regions: BinValues 

129 geo: GEOStatistics 

130 

131 

132class BedSnapshotArtifact(BaseModel): 

133 """A built snapshot file to publish (upload to S3 + record in the database).""" 

134 

135 path: str # local file path to upload 

136 file_type: str 

137 record_count: int | None = None 

138 file_size: int | None = None 

139 checksum: str | None = None 

140 schema_version: int | None = None 

141 

142 

143class BedSnapshotResult(BaseModel): 

144 """One published bulk-export artifact.""" 

145 

146 file_path: str 

147 file_type: str 

148 creation_date: datetime.datetime 

149 record_count: int | None = None 

150 file_size: int | None = None 

151 checksum: str | None = None 

152 schema_version: int | None = None 

153 

154 

155class BedSnapshotListResult(BaseModel): 

156 count: int 

157 results: list[BedSnapshotResult] 

158 

159 

160class AnalysisFileArtifact(BaseModel): 

161 """A standalone analysis file to publish (upload to S3 + record in the database).""" 

162 

163 path: str # local file path to upload 

164 name: str 

165 file_type: str | None = None 

166 genome: str | None = None 

167 description: str | None = None 

168 tags: list[str] | None = None 

169 file_size: int | None = None 

170 checksum: str | None = None 

171 

172 

173class AnalysisFileResult(BaseModel): 

174 """One registered standalone analysis file.""" 

175 

176 id: int | None = None 

177 name: str 

178 file_path: str 

179 file_type: str | None = None 

180 genome: str | None = None 

181 description: str | None = None 

182 tags: list[str] | None = None 

183 file_size: int | None = None 

184 checksum: str | None = None 

185 creation_date: datetime.datetime 

186 

187 

188class AnalysisFileListResult(BaseModel): 

189 count: int 

190 results: list[AnalysisFileResult]