Coverage for tests/utils.py: 31%
58 statements
« prev ^ index » next coverage.py v7.6.0, created at 2024-07-17 04:01 +0000
« prev ^ index » next coverage.py v7.6.0, created at 2024-07-17 04:01 +0000
1from typing import Union
3from sqlalchemy.orm import Session
5from bbconf.config_parser.bedbaseconfig import BedBaseConfig
6from bbconf.db_utils import Bed, BedFileBedSetRelation, BedSets, BedStats, Files
8BED_TEST_ID = "bbad85f21962bb8d972444f7f9a3a932"
9BEDSET_TEST_ID = "test_bedset_id"
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}
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
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 }
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 }
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 }
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 """
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)
99 self.add_data = add_data
100 self.bedset = bedset
102 self.db_engine = self.config.db_engine
103 self.db_engine.create_schema()
105 def __enter__(self):
106 if self.add_data:
107 self._add_data()
108 if self.bedset:
109 self._add_bedset_data()
111 def __exit__(self, exc_type, exc_value, exc_traceback):
112 self.db_engine.delete_schema()
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)
121 session.add(new_bed)
122 session.add(new_files)
123 session.add(new_plots)
124 session.add(new_stats)
126 session.commit()
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())
144 session.add(new_bedset)
145 session.add(new_bed_bedset)
146 session.add(new_files)
148 session.commit()
150 def _add_universe(self):
151 from bbconf.db_utils import Universes
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()