Skip to content

Commit

Permalink
chore: update pyo3 deprecetations
Browse files Browse the repository at this point in the history
  • Loading branch information
noamteyssier committed Nov 22, 2024
1 parent d6ac705 commit da89531
Show file tree
Hide file tree
Showing 17 changed files with 84 additions and 74 deletions.
2 changes: 1 addition & 1 deletion src/archs4/python.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ pub fn python_archs4_tissue<'py>(

/// Wraps `ARCHS4` specific functions into a python submodule
pub fn python_archs4(py: Python<'_>, module: &Bound<'_, PyModule>) -> PyResult<()> {
let submodule = PyModule::new_bound(py, "archs4")?;
let submodule = PyModule::new(py, "archs4")?;
submodule.add_function(wrap_pyfunction!(python_archs4_tissue, module)?)?;
submodule.add_function(wrap_pyfunction!(python_archs4_correlate, module)?)?;
module.add_submodule(&submodule)?;
Expand Down
4 changes: 2 additions & 2 deletions src/archs4/types/correlation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ impl fmt::Display for Correlations {
}
impl Correlations {
pub fn as_pydict<'py>(&self, py: Python<'py>) -> PyResult<Bound<'py, PyDict>> {
let dict = PyDict::new_bound(py);
let dict = PyDict::new(py);
dict.set_item(
"correlations",
self.correlations
Expand Down Expand Up @@ -90,7 +90,7 @@ impl fmt::Display for Correlation {
}
impl Correlation {
pub fn as_pydict<'py>(&self, py: Python<'py>) -> PyResult<Bound<'py, PyDict>> {
let dict = PyDict::new_bound(py);
let dict = PyDict::new(py);
dict.set_item("gene_symbol", &self.gene_symbol)?;
dict.set_item("pearson_correlation", self.pearson_correlation)?;
Ok(dict)
Expand Down
4 changes: 2 additions & 2 deletions src/archs4/types/tissue.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ impl ResponseTissue {
.collect()
}
pub fn as_pydict<'py>(&self, py: Python<'py>) -> PyResult<Bound<'py, PyDict>> {
let dict = PyDict::new_bound(py);
let dict = PyDict::new(py);
dict.set_item(
"tissues",
self.results
Expand Down Expand Up @@ -124,7 +124,7 @@ impl ResultTissue {
}

pub fn as_pydict<'py>(&self, py: Python<'py>) -> PyResult<Bound<'py, PyDict>> {
let dict = PyDict::new_bound(py);
let dict = PyDict::new(py);
dict.set_item("id", &self.id)?;
dict.set_item("min", self.min)?;
dict.set_item("q1", self.q1)?;
Expand Down
3 changes: 1 addition & 2 deletions src/blast/python.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ use pyo3::{
signature = (query, program = None, database = None, limit = None, expect = None, low_comp_filter = None, megablast = None)
)]
#[allow(clippy::too_many_arguments)]

pub fn python_blast<'py>(
py: Python<'py>,
query: &str,
Expand Down Expand Up @@ -61,5 +60,5 @@ pub fn python_blast<'py>(
low_comp_filter,
megablast,
)?;
Ok(response.into_py_dict_bound(py))
Ok(response.into_py_dict(py)?)
}
4 changes: 2 additions & 2 deletions src/cli/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ pub enum Commands {
#[clap(required = true)]
search_terms: Vec<String>,

/// Species name to use: currently this MUST match the taxon_id
/// Species name to use: currently this MUST match the `taxon_id`
#[clap(short, long, default_value = "homo_sapiens")]
species: String,

Expand All @@ -129,7 +129,7 @@ pub enum Commands {
output: Option<String>,
},

/// Queries sequences from ensembl and UniProt
/// Queries sequences from ensembl and `UniProt`
Seq {
/// Search terms to query (can be Ensembl IDs or Gene Symbols)
#[clap(value_parser, required = true)]
Expand Down
2 changes: 1 addition & 1 deletion src/cli/enrichr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use clap::Subcommand;
pub enum ModEnrichr {
/// Perform the Enrichr gene set enrichment analysis
Enrichr {
/// any database listed at: https://maayanlab.cloud/Enrichr/#libraries
/// any database listed at: <https://maayanlab.cloud/Enrichr/#libraries>
/// some shorthands include: pathway, transcription, ontology, diseases_drugs, celltypes,
/// and kinase_interactions.
#[clap(short, long)]
Expand Down
15 changes: 9 additions & 6 deletions src/enrichr/types/enrich.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,15 @@ impl fmt::Display for ResponseEnrich {
}
impl ResponseEnrich {
pub fn as_pydict<'py>(&self, py: Python<'py>) -> PyResult<Bound<'py, PyDict>> {
let dict = PyDict::new_bound(py);
let dict = PyDict::new(py);
for (key, results) in &self.0 {
let all_results: Vec<Bound<'py, PyDict>> = results
.iter()
.map(|x| x.as_pydict(py).expect("could not create dictionary"))
.collect();
let all_results =
results
.iter()
.try_fold(Vec::new(), |mut acc, x| -> PyResult<Vec<_>> {
acc.push(x.as_pydict(py)?);
Ok(acc)
})?;
dict.set_item(key, all_results)?;
}
Ok(dict)
Expand Down Expand Up @@ -72,7 +75,7 @@ impl fmt::Display for ResultEnrichr {
}
impl ResultEnrichr {
pub fn as_pydict<'py>(&self, py: Python<'py>) -> PyResult<Bound<'py, PyDict>> {
let dict = PyDict::new_bound(py);
let dict = PyDict::new(py);
dict.set_item("rank", self.rank)?;
dict.set_item("term_name", &self.term_name)?;
dict.set_item("pvalue", self.pvalue)?;
Expand Down
4 changes: 2 additions & 2 deletions src/ensembl/functions/database.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use mysql::{prelude::Queryable, Conn, OptsBuilder};
pub fn database(filter: &Option<String>) -> anyhow::Result<ResponseDatabases> {
let opts = get_mysql_options();
let mut conn = Conn::new(opts)?;
let query = build_search_query(filter);
let query = build_search_query(filter.as_ref());
let results: Vec<Database> = conn.query_map(query, Database)?;
if results.is_empty() {
match filter {
Expand All @@ -28,7 +28,7 @@ fn get_mysql_options() -> OptsBuilder {
/// Generates the search query.
///
/// Searches through databases for a related token
fn build_search_query(search_term: &Option<String>) -> String {
fn build_search_query(search_term: Option<&String>) -> String {
if let Some(token) = search_term {
format!("SHOW databases LIKE '%{token}%'")
} else {
Expand Down
2 changes: 1 addition & 1 deletion src/ensembl/python.rs
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ pub fn python_ensembl_species(
}

pub fn python_ensembl(py: Python<'_>, module: &Bound<'_, PyModule>) -> PyResult<()> {
let submodule = PyModule::new_bound(py, "ensembl")?;
let submodule = PyModule::new(py, "ensembl")?;
submodule.add_function(wrap_pyfunction!(python_ensembl_search, module)?)?;
submodule.add_function(wrap_pyfunction!(python_ensembl_database, module)?)?;
submodule.add_function(wrap_pyfunction!(python_ensembl_release, module)?)?;
Expand Down
2 changes: 1 addition & 1 deletion src/ensembl/types/ftpfile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ impl FtpFile {
}

pub fn as_pydict<'py>(&self, py: Python<'py>) -> PyResult<Bound<'py, PyDict>> {
let dict = PyDict::new_bound(py);
let dict = PyDict::new(py);
dict.set_item("url", &self.url)?;
dict.set_item("ensembl_release", self.ensembl_release)?;
dict.set_item("release_date", &self.release_date)?;
Expand Down
4 changes: 2 additions & 2 deletions src/ensembl/types/search_results.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ impl fmt::Display for SearchResults {
}
impl SearchResults {
pub fn as_pydict<'py>(&self, py: Python<'py>) -> Result<Bound<'py, PyDict>> {
let dict = PyDict::new_bound(py);
let dict = PyDict::new(py);
dict.set_item(
"results",
self.0
Expand Down Expand Up @@ -82,7 +82,7 @@ impl SearchResult {
}

pub fn as_pydict<'py>(&self, py: Python<'py>) -> PyResult<Bound<'py, PyDict>> {
let dict = PyDict::new_bound(py);
let dict = PyDict::new(py);
dict.set_item("stable_id", &self.stable_id)?;
dict.set_item("display_label", &self.display_label)?;
dict.set_item("ensembl_description", &self.ensembl_description)?;
Expand Down
20 changes: 10 additions & 10 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,18 +53,18 @@ pub mod seq;
pub type RequestError = Box<dyn std::error::Error + Send + Sync>;

#[pymodule]
fn ggetrs(py: Python<'_>, module: Bound<'_, PyModule>) -> PyResult<()> {
module.add_function(wrap_pyfunction!(enrichr::python_enrichr, &module)?)?;
fn ggetrs(py: Python<'_>, module: &Bound<'_, PyModule>) -> PyResult<()> {
module.add_function(wrap_pyfunction!(enrichr::python_enrichr, module)?)?;
module.add_function(wrap_pyfunction!(
enrichr::python_enrichr_background,
&module
module
)?)?;
archs4::python_archs4(py, &module)?;
ensembl::python_ensembl(py, &module)?;
ucsc::python_ucsc(py, &module)?;
module.add_function(wrap_pyfunction!(ensembl::python_ensembl_search, &module)?)?;
module.add_function(wrap_pyfunction!(seq::python_seq, &module)?)?;
module.add_function(wrap_pyfunction!(info::python_info, &module)?)?;
module.add_function(wrap_pyfunction!(blast::python_blast, &module)?)?;
archs4::python_archs4(py, module)?;
ensembl::python_ensembl(py, module)?;
ucsc::python_ucsc(py, module)?;
module.add_function(wrap_pyfunction!(ensembl::python_ensembl_search, module)?)?;
module.add_function(wrap_pyfunction!(seq::python_seq, module)?)?;
module.add_function(wrap_pyfunction!(info::python_info, module)?)?;
module.add_function(wrap_pyfunction!(blast::python_blast, module)?)?;
Ok(())
}
8 changes: 6 additions & 2 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@ use ggetrs::{
ncbi::{launch_ncbi_query_ids, launch_ncbi_query_symbols, launch_ncbi_taxons},
pdb::{launch_pdb_resource, launch_pdb_structure},
seq::launch_seq,
string::*,
string::{
launch_string_annotations, launch_string_enrichment, launch_string_homology,
launch_string_interactions, launch_string_mapping, launch_string_network,
launch_string_ppi_enrichment,
},
ucsc::launch_ucsc_blat,
uniprot::launch_uniprot_query,
utils::autocomplete::print_completions,
Expand Down Expand Up @@ -250,7 +254,7 @@ fn main() -> Result<(), RequestError> {
ModString::Enrichment { args, output } => launch_string_enrichment(args, output)?,
ModString::Annotations { args, output } => launch_string_annotations(args, output)?,
ModString::PpiEnrichment { args, output } => {
launch_string_ppi_enrichment(args, output)?
launch_string_ppi_enrichment(args, output)?;
}
},
Commands::Autocomplete { shell } => print_completions(*shell, &mut Cli::command()),
Expand Down
2 changes: 1 addition & 1 deletion src/ucsc/python.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ pub fn python_ucsc_blat<'py>(
}

pub fn python_ucsc(py: Python<'_>, module: &Bound<'_, PyModule>) -> PyResult<()> {
let submodule = PyModule::new_bound(py, "ucsc")?;
let submodule = PyModule::new(py, "ucsc")?;
submodule.add_function(wrap_pyfunction!(python_ucsc_blat, module)?)?;
module.add_submodule(&submodule)?;
Ok(())
Expand Down
58 changes: 30 additions & 28 deletions src/ucsc/types/blat.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,15 @@ impl BlatResults {
Self(results)
}
pub fn as_pylist<'py>(&self, py: Python<'py>) -> PyResult<Bound<'py, PyList>> {
let vec_dict: Vec<Bound<'py, PyDict>> = self
.0
.iter()
.cloned()
.map(|x| x.into_py_dict(py).unwrap())
.collect();
Ok(PyList::new(py, vec_dict)?)
let vec_dict =
self.0
.iter()
.cloned()
.try_fold(Vec::new(), |mut acc, x| -> PyResult<Vec<_>> {
acc.push(x.into_py_dict(py)?);
Ok(acc)
})?;
PyList::new(py, vec_dict)
}
}

Expand Down Expand Up @@ -75,27 +77,27 @@ impl fmt::Display for Blat {
impl<'py> IntoPyDict<'py> for Blat {
fn into_py_dict(self, py: Python<'py>) -> PyResult<Bound<'py, PyDict>> {
let dict = PyDict::new(py);
dict.set_item("matches", self.matches).unwrap();
dict.set_item("mismatches", self.mismatches).unwrap();
dict.set_item("repmatches", self.repmatches).unwrap();
dict.set_item("n_count", self.n_count).unwrap();
dict.set_item("q_num_insert", self.q_num_insert).unwrap();
dict.set_item("q_base_insert", self.q_base_insert).unwrap();
dict.set_item("t_num_insert", self.t_num_insert).unwrap();
dict.set_item("t_base_insert", self.t_base_insert).unwrap();
dict.set_item("strand", &self.strand).unwrap();
dict.set_item("q_name", &self.q_name).unwrap();
dict.set_item("q_size", self.q_size).unwrap();
dict.set_item("q_start", self.q_start).unwrap();
dict.set_item("q_end", self.q_end).unwrap();
dict.set_item("t_name", &self.t_name).unwrap();
dict.set_item("t_size", self.t_size).unwrap();
dict.set_item("t_start", self.t_start).unwrap();
dict.set_item("t_end", self.t_end).unwrap();
dict.set_item("block_count", self.block_count).unwrap();
dict.set_item("block_sizes", &self.block_sizes).unwrap();
dict.set_item("q_starts", &self.q_starts).unwrap();
dict.set_item("q_starts", &self.t_starts).unwrap();
dict.set_item("matches", self.matches)?;
dict.set_item("mismatches", self.mismatches)?;
dict.set_item("repmatches", self.repmatches)?;
dict.set_item("n_count", self.n_count)?;
dict.set_item("q_num_insert", self.q_num_insert)?;
dict.set_item("q_base_insert", self.q_base_insert)?;
dict.set_item("t_num_insert", self.t_num_insert)?;
dict.set_item("t_base_insert", self.t_base_insert)?;
dict.set_item("strand", &self.strand)?;
dict.set_item("q_name", &self.q_name)?;
dict.set_item("q_size", self.q_size)?;
dict.set_item("q_start", self.q_start)?;
dict.set_item("q_end", self.q_end)?;
dict.set_item("t_name", &self.t_name)?;
dict.set_item("t_size", self.t_size)?;
dict.set_item("t_start", self.t_start)?;
dict.set_item("t_end", self.t_end)?;
dict.set_item("block_count", self.block_count)?;
dict.set_item("block_sizes", &self.block_sizes)?;
dict.set_item("q_starts", &self.q_starts)?;
dict.set_item("q_starts", &self.t_starts)?;
Ok(dict)
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/uniprot/functions/query.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use reqwest::Client;
use serde_json::Value;
use std::collections::HashMap;

fn build_query_string(gene: &str, freeform: bool, taxon: &Option<usize>) -> String {
fn build_query_string(gene: &str, freeform: bool, taxon: Option<&usize>) -> String {
let gene_query = if gene.starts_with("ENS") || freeform {
format!("({gene})")
} else {
Expand All @@ -26,7 +26,7 @@ pub async fn async_query_uniprot(
freeform: bool,
taxon: &Option<usize>,
) -> Result<Option<UniprotInfo>> {
let query = build_query_string(gene, freeform, taxon);
let query = build_query_string(gene, freeform, taxon.as_ref());
let url = format!("https://rest.uniprot.org/uniprotkb/search?query={query}+AND+reviewed:true",);
let value = Client::new()
.get(&url) // Updated to pass the URL by reference
Expand Down
20 changes: 11 additions & 9 deletions src/utils/fasta.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,15 @@ use std::fmt::Display;
pub struct FastaRecords(pub Vec<FastaRecord>);
impl FastaRecords {
pub fn as_pylist<'py>(&self, py: Python<'py>) -> PyResult<Bound<'py, PyList>> {
let vec_dict: Vec<Bound<'py, PyDict>> = self
.0
.iter()
.cloned()
.map(|x| x.into_py_dict(py).unwrap())
.collect();
Ok(PyList::new(py, vec_dict)?)
let vec_dict =
self.0
.iter()
.cloned()
.try_fold(Vec::default(), |mut acc, x| -> PyResult<Vec<_>> {
acc.push(x.into_py_dict(py)?);
Ok(acc)
})?;
PyList::new(py, vec_dict)
}
}

Expand All @@ -33,8 +35,8 @@ impl Display for FastaRecord {
impl<'py> IntoPyDict<'py> for FastaRecord {
fn into_py_dict(self, py: Python<'py>) -> PyResult<Bound<'py, PyDict>> {
let map = PyDict::new(py);
map.set_item("header", self.header).unwrap();
map.set_item("sequence", self.sequence).unwrap();
map.set_item("header", self.header)?;
map.set_item("sequence", self.sequence)?;
Ok(map)
}
}
Expand Down

0 comments on commit da89531

Please sign in to comment.