Coverage for tests/utils.py: 31%

58 statements  

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

1from typing import Union 

2 

3from sqlalchemy.orm import Session 

4 

5from bbconf.config_parser.bedbaseconfig import BedBaseConfig 

6from bbconf.db_utils import Bed, BedFileBedSetRelation, BedSets, BedStats, Files 

7 

8BED_TEST_ID = "bbad85f21962bb8d972444f7f9a3a932" 

9BEDSET_TEST_ID = "test_bedset_id" 

10 

11 

12stats = { 

13 "id": BED_TEST_ID, 

14 "number_of_regions": 1, 

15 "median_tss_dist": 2, 

16 "mean_region_width": 3, 

17 "exon_frequency": 4, 

18 "exon_percentage": 5, 

19 "intron_frequency": 6, 

20 "intron_percentage": 7, 

21 "intergenic_percentage": 8, 

22 "intergenic_frequency": 9, 

23 "promotercore_frequency": 10, 

24 "promotercore_percentage": 11, 

25 "fiveutr_frequency": 12, 

26 "fiveutr_percentage": 13, 

27 "threeutr_frequency": 14, 

28 "threeutr_percentage": 15, 

29 "promoterprox_frequency": 16, 

30 "promoterprox_percentage": 17, 

31} 

32 

33 

34def get_example_dict() -> dict: 

35 value = { 

36 "id": BED_TEST_ID, 

37 "bed_format": "narrowpeak", 

38 "bed_type": "bed6+4", 

39 "genome_alias": "hg38", 

40 "genome_digest": "2230c535660fb4774114bfa966a62f823fdb6d21acf138d4", 

41 "name": "random_name", 

42 } 

43 return value 

44 

45 

46def get_bedset_files() -> dict: 

47 return { 

48 "title": "region_commonality", 

49 "name": "region_commonality", 

50 "path": "data/files/bbad85f21962bb8d972444f7f9a3a932.bed.gz", 

51 "description": "Bfffffff", 

52 "bedset_id": BEDSET_TEST_ID, 

53 } 

54 

55 

56def get_files() -> dict: 

57 return { 

58 "title": "Bed file", 

59 "name": "bed_file", 

60 "path": "data/files/bbad85f21962bb8d972444f7f9a3a932.bed.gz", 

61 "description": "Bed file with regions", 

62 "bedfile_id": BED_TEST_ID, 

63 } 

64 

65 

66def get_plots() -> dict: 

67 return { 

68 "name": "chrombins", 

69 "description": "Regions distribution over chromosomes", 

70 "title": "Regions distribution over chromosomes", 

71 "path": "data/plots/bbad85f21962bb8d972444f7f9a3a932_chrombins.pdf", 

72 "path_thumbnail": "data/plots/bbad85f21962bb8d972444f7f9a3a932_chrombins.png", 

73 "bedfile_id": BED_TEST_ID, 

74 } 

75 

76 

77class ContextManagerDBTesting: 

78 """ 

79 Creates context manager to connect to database at db_url adds data and drop everything from the database upon exit to ensure 

80 the db is empty for each new test. 

81 """ 

82 

83 def __init__( 

84 self, 

85 config: Union[str, BedBaseConfig], 

86 add_data: bool = False, 

87 bedset: bool = False, 

88 ): 

89 """ 

90 :param config: config object 

91 :param add_data: add data to the database 

92 :param bedset: add bedset data to the database 

93 """ 

94 if isinstance(config, BedBaseConfig): 

95 self.config = config 

96 else: 

97 self.config = BedBaseConfig(config) 

98 

99 self.add_data = add_data 

100 self.bedset = bedset 

101 

102 self.db_engine = self.config.db_engine 

103 self.db_engine.create_schema() 

104 

105 def __enter__(self): 

106 if self.add_data: 

107 self._add_data() 

108 if self.bedset: 

109 self._add_bedset_data() 

110 

111 def __exit__(self, exc_type, exc_value, exc_traceback): 

112 self.db_engine.delete_schema() 

113 

114 def _add_data(self): 

115 with Session(self.db_engine.engine) as session: 

116 new_bed = Bed(**get_example_dict()) 

117 new_files = Files(**get_files()) 

118 new_plots = Files(**get_plots()) 

119 new_stats = BedStats(**stats) 

120 

121 session.add(new_bed) 

122 session.add(new_files) 

123 session.add(new_plots) 

124 session.add(new_stats) 

125 

126 session.commit() 

127 

128 def _add_bedset_data(self): 

129 with Session(self.db_engine.engine) as session: 

130 new_bedset = BedSets( 

131 id=BEDSET_TEST_ID, 

132 name=BEDSET_TEST_ID, 

133 description="random desc", 

134 bedset_means=stats, 

135 bedset_standard_deviation=stats, 

136 md5sum="bbad0000000000000000000000000000", 

137 ) 

138 new_bed_bedset = BedFileBedSetRelation( 

139 bedfile_id=BED_TEST_ID, 

140 bedset_id=BEDSET_TEST_ID, 

141 ) 

142 new_files = Files(**get_bedset_files()) 

143 

144 session.add(new_bedset) 

145 session.add(new_bed_bedset) 

146 session.add(new_files) 

147 

148 session.commit() 

149 

150 def _add_universe(self): 

151 from bbconf.db_utils import Universes 

152 

153 with Session(self.db_engine.engine) as session: 

154 new_univ = Universes( 

155 id=BED_TEST_ID, 

156 ) 

157 session.add(new_univ) 

158 session.commit()