Add support for a Raker config
This commit is contained in:
parent
1f681164c9
commit
2763ff2481
|
@ -1,4 +1,6 @@
|
||||||
|
|
||||||
.idea
|
/.idea
|
||||||
data/cf_ips.txt
|
/data/cf_ips.txt
|
||||||
data
|
/data
|
||||||
|
/qp_raker.toml
|
||||||
|
.*.swp
|
||||||
|
|
|
@ -2200,6 +2200,7 @@ dependencies = [
|
||||||
"serde_bare",
|
"serde_bare",
|
||||||
"sitemap",
|
"sitemap",
|
||||||
"tokio",
|
"tokio",
|
||||||
|
"toml",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -2889,6 +2890,15 @@ dependencies = [
|
||||||
"tokio",
|
"tokio",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "toml"
|
||||||
|
version = "0.5.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
|
||||||
|
dependencies = [
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tower-service"
|
name = "tower-service"
|
||||||
version = "0.3.1"
|
version = "0.3.1"
|
||||||
|
|
|
@ -22,6 +22,8 @@ html5ever = "0.25.1"
|
||||||
serde = { version = "1.0.136", features = ["derive"] }
|
serde = { version = "1.0.136", features = ["derive"] }
|
||||||
serde_bare = "0.5.0"
|
serde_bare = "0.5.0"
|
||||||
|
|
||||||
|
toml = "0.5.8"
|
||||||
|
|
||||||
### Dates
|
### Dates
|
||||||
chrono = "0.4.19"
|
chrono = "0.4.19"
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
use clap::Parser;
|
||||||
|
|
||||||
|
use env_logger::Env;
|
||||||
|
|
||||||
|
use anyhow::Context;
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
use quickpeep_raker::config;
|
||||||
|
|
||||||
|
/// Seeds a raker's queue with URLs
|
||||||
|
#[derive(Clone, Debug, Parser)]
|
||||||
|
pub struct Opts {
|
||||||
|
#[clap(long = "config")]
|
||||||
|
config: Option<PathBuf>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
pub async fn main() -> anyhow::Result<()> {
|
||||||
|
env_logger::Builder::from_env(Env::default().default_filter_or("info,quickpeep=debug")).init();
|
||||||
|
|
||||||
|
let opts: Opts = Opts::parse();
|
||||||
|
|
||||||
|
let config_path = opts
|
||||||
|
.config
|
||||||
|
.unwrap_or_else(|| PathBuf::from("qp_raker.toml"));
|
||||||
|
let config = config::RakerConfig::load(&config_path).context("Failed to load config")?;
|
||||||
|
|
||||||
|
eprintln!("{:#?}", config);
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
use anyhow::Context;
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||||
|
/// Config for a raker. All paths are relative to the config file if needed, but will be resolved
|
||||||
|
/// when loading.
|
||||||
|
pub struct RakerConfig {
|
||||||
|
/// Path to data files
|
||||||
|
data_dir: PathBuf,
|
||||||
|
|
||||||
|
/// Path to seeds
|
||||||
|
seed_dir: PathBuf,
|
||||||
|
|
||||||
|
/// Path to the raker's workbench (queue etc)
|
||||||
|
workbench_dir: PathBuf,
|
||||||
|
|
||||||
|
/// Directory where new rake packs will be emitted
|
||||||
|
emit_dir: PathBuf,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl RakerConfig {
|
||||||
|
/// Loads a config at the specified path.
|
||||||
|
/// Will resolve all the paths in the RakerConfig for you.
|
||||||
|
pub fn load(path: &Path) -> anyhow::Result<RakerConfig> {
|
||||||
|
let config_dir = path.parent().context("Can't get parent of config file.")?;
|
||||||
|
let bytes = std::fs::read(path)?;
|
||||||
|
let mut raker_config: RakerConfig = toml::from_slice(&bytes)?;
|
||||||
|
|
||||||
|
raker_config.data_dir = config_dir.join(raker_config.data_dir);
|
||||||
|
raker_config.seed_dir = config_dir.join(raker_config.seed_dir);
|
||||||
|
raker_config.workbench_dir = config_dir.join(raker_config.workbench_dir);
|
||||||
|
raker_config.emit_dir = config_dir.join(raker_config.emit_dir);
|
||||||
|
|
||||||
|
Ok(raker_config)
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,6 @@
|
||||||
pub mod raking;
|
pub mod raking;
|
||||||
|
|
||||||
|
pub mod config;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test;
|
mod test;
|
||||||
|
|
Loading…
Reference in New Issue