working as expected

This commit is contained in:
Palash Tyagi
2024-11-09 20:06:01 +00:00
parent 8ef47925d3
commit 8ae35d2981
5 changed files with 96 additions and 39 deletions

View File

@@ -7,18 +7,20 @@ use std::error::Error;
const DEFAULT_JPMAQS_METRICS: [&str; 4] = ["value", "grading", "eop_lag", "mop_lag"];
fn ticker_to_expressions(ticker: &str) -> Vec<String> {
DEFAULT_JPMAQS_METRICS
fn ticker_to_expressions(ticker: &str, metrics: Vec<&str>) -> Vec<String> {
metrics
.iter()
.map(|metric| format!("DB(JPMAQS,{},{})", ticker, metric))
.collect::<Vec<String>>()
}
fn construct_expressions(tickers: Vec<String>) -> Vec<String> {
fn construct_expressions(tickers: Vec<String>, metrics: Vec<String>) -> Vec<String> {
tickers
.iter()
.flat_map(|ticker| ticker_to_expressions(ticker))
.collect()
.flat_map(|ticker| {
ticker_to_expressions(ticker, metrics.clone().iter().map(|s| s.as_str()).collect())
})
.collect::<Vec<String>>()
}
fn is_jpmaq_expression(expression: &str) -> bool {
@@ -35,6 +37,28 @@ fn all_jpmaq_expressions(expressions: Vec<String>) -> bool {
.all(|expression| is_jpmaq_expression(expression))
}
#[derive(Debug, Clone)]
pub struct JPMaQSDownloadGetIndicatorArgs {
pub tickers: Vec<String>,
pub metrics: Vec<String>,
pub start_date: String,
pub end_date: String,
}
impl Default for JPMaQSDownloadGetIndicatorArgs {
fn default() -> Self {
JPMaQSDownloadGetIndicatorArgs {
tickers: Vec::new(),
metrics: DEFAULT_JPMAQS_METRICS
.iter()
.map(|s| s.to_string())
.collect(),
start_date: "1990-01-01".to_string(),
end_date: "TODAY+2D".to_string(),
}
}
}
#[derive(Debug, Clone)]
pub struct JPMaQSDownload {
requester: DQRequester,
@@ -77,9 +101,13 @@ impl JPMaQSDownload {
pub fn get_indicators(
&mut self,
tickers: Vec<String>,
download_args: JPMaQSDownloadGetIndicatorArgs,
) -> Result<Vec<JPMaQSIndicator>, Box<dyn Error>> {
let expressions = construct_expressions(tickers);
if download_args.tickers.is_empty() {
return Err("No tickers provided".into());
}
let expressions = construct_expressions(download_args.tickers, download_args.metrics);
assert!(all_jpmaq_expressions(expressions.clone()));
let dqts_vec = self.get_expressions(expressions)?;