Skip to content

Commit 1edb5da

Browse files
Merge pull request #89 from databio/dev
Release 0.11.4
2 parents b27618b + f5d822d commit 1edb5da

6 files changed

Lines changed: 62 additions & 32 deletions

File tree

bbconf/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "0.11.3"
1+
__version__ = "0.11.4"

bbconf/bbagent.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,10 +229,14 @@ def get_list_genomes(self) -> List[str]:
229229
230230
:return: list of genomes
231231
"""
232-
statement = select(distinct(Bed.genome_alias))
232+
statement = (
233+
select(Bed.genome_alias)
234+
.group_by(Bed.genome_alias)
235+
.order_by(func.count(Bed.genome_alias).desc())
236+
)
233237
with Session(self.config.db_engine.engine) as session:
234238
genomes = session.execute(statement).all()
235-
return [result[0] for result in genomes]
239+
return [result[0] for result in genomes if result[0]]
236240

237241
@cached_property
238242
def list_of_licenses(self) -> List[str]:

bbconf/modules/bedfiles.py

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1183,7 +1183,7 @@ def text_to_bed_search(
11831183
if result_meta:
11841184
results_list.append(QdrantSearchResult(**result, metadata=result_meta))
11851185
return BedListSearchResult(
1186-
count=self.bb_agent.get_stats().bedfiles_number,
1186+
count=self.bb_agent.get_detailed_stats().file_genome.get("hg38", 0),
11871187
limit=limit,
11881188
offset=offset,
11891189
results=results_list,
@@ -1218,34 +1218,49 @@ def bed_to_bed_search(
12181218
)
12191219

12201220
def sql_search(
1221-
self, query: str, limit: int = 10, offset: int = 0
1221+
self,
1222+
query: str,
1223+
genome: str = None,
1224+
limit: int = 10,
1225+
offset: int = 0,
12221226
) -> BedListSearchResult:
12231227
"""
12241228
Search for bed files by using sql exact search.
12251229
This search will search files by id, name, and description
12261230
12271231
:param query: text query
1232+
:param genome: genome alias to filter results
12281233
:param limit: number of results to return
12291234
:param offset: offset to start from
12301235
12311236
:return: list of bed file metadata
12321237
"""
12331238
_LOGGER.debug(f"Looking for: {query}")
12341239

1240+
statement = select(Bed).join(BedMetadata)
1241+
12351242
sql_search_str = f"%{query}%"
1243+
or_statement = or_(
1244+
Bed.id.ilike(sql_search_str),
1245+
Bed.name.ilike(sql_search_str),
1246+
Bed.description.ilike(sql_search_str),
1247+
BedMetadata.cell_line.ilike(sql_search_str),
1248+
BedMetadata.tissue.ilike(sql_search_str),
1249+
BedMetadata.cell_type.ilike(sql_search_str),
1250+
)
1251+
1252+
if genome_alias := genome:
1253+
_LOGGER.debug(f"Filtering by genome: {genome_alias}")
1254+
1255+
condition_statement = and_(Bed.genome_alias == genome_alias, or_statement)
1256+
1257+
else:
1258+
condition_statement = or_statement
1259+
1260+
statement = statement.where(condition_statement)
1261+
12361262
with Session(self._sa_engine) as session:
1237-
statement = (
1238-
select(Bed)
1239-
.where(
1240-
or_(
1241-
Bed.id.ilike(sql_search_str),
1242-
Bed.name.ilike(sql_search_str),
1243-
Bed.description.ilike(sql_search_str),
1244-
)
1245-
)
1246-
.limit(limit)
1247-
.offset(offset)
1248-
)
1263+
statement = statement.limit(limit).offset(offset)
12491264
bed_objects = session.scalars(statement)
12501265
results = [
12511266
BedMetadataBasic(
@@ -1266,32 +1281,27 @@ def sql_search(
12661281
]
12671282

12681283
return BedListSearchResult(
1269-
count=self._sql_search_count(query),
1284+
count=self._sql_search_count(condition_statement),
12701285
limit=limit,
12711286
offset=offset,
12721287
results=result_list,
12731288
)
12741289

1275-
def _sql_search_count(self, query: str) -> int:
1290+
def _sql_search_count(self, condition_statement) -> int:
12761291
"""
12771292
Get number of total found files in the database.
12781293
1279-
:param query: text query
1294+
:param condition_statement: sql alchemy condition statement to filter results
12801295
12811296
:return: number of found files
12821297
"""
1283-
sql_search_str = f"%{query}%"
1298+
12841299
with Session(self._sa_engine) as session:
12851300
statement = (
12861301
select(func.count())
12871302
.select_from(Bed)
1288-
.where(
1289-
or_(
1290-
Bed.id.ilike(sql_search_str),
1291-
Bed.name.ilike(sql_search_str),
1292-
Bed.description.ilike(sql_search_str),
1293-
)
1294-
)
1303+
.join(BedMetadata)
1304+
.where(condition_statement)
12951305
)
12961306
count = session.execute(statement).one()
12971307
return count[0]

bbconf/modules/bedsets.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,7 @@ def get_ids_list(
482482
statement = select(BedSets.id)
483483
count_statement = select(func.count(BedSets.id))
484484
if query:
485+
query = query.strip()
485486
sql_search_str = f"%{query}%"
486487
statement = statement.where(
487488
or_(

docs/changelog.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@
22

33
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html) and [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) format.
44

5-
### [0.11.3] - 2025-06-27
5+
### [0.11.4] - 2025-06-01
6+
### Fixed:
7+
- SQL search
8+
9+
10+
### [0.11.3] - 2025-05-27
611
### Fixed:
712
- Usage tracker
813
- Order of comprehensive stats

manual_testing.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ def sql_search():
197197
from bbconf import BedBaseAgent
198198

199199
agent = BedBaseAgent(config="/home/bnt4me/virginia/repos/bedhost/config.yaml")
200-
results = agent.bed.sql_search("K562", limit=100)
200+
results = agent.bed.sql_search("", limit=100, genome="mm39")
201201
results
202202

203203

@@ -226,6 +226,15 @@ def get_unprocessed_files():
226226
print(results)
227227

228228

229+
def get_genomes():
230+
231+
from bbconf import BedBaseAgent
232+
233+
agent = BedBaseAgent(config="/home/bnt4me/virginia/repos/bedhost/config.yaml")
234+
results = agent.get_list_genomes()
235+
print(results)
236+
237+
229238
if __name__ == "__main__":
230239
# zarr_s3()
231240
# add_s3()
@@ -234,7 +243,8 @@ def get_unprocessed_files():
234243
# get_pep()
235244
# get_id_plots_missing()
236245
# neighbour_beds()
237-
# sql_search()
246+
sql_search()
238247
# config_t()
239248
# compreh_stats()
240-
get_unprocessed_files()
249+
# get_unprocessed_files()
250+
# get_genomes()

0 commit comments

Comments
 (0)