mirror of
https://github.com/openai/codex.git
synced 2026-09-14 11:57:03 +00:00
consolidate new() and parse() in PolicyParser
This commit is contained in:
@@ -47,6 +47,5 @@ fn load_policy(policy_path: &Path) -> Result<codex_execpolicy2::Policy> {
|
||||
let content = fs::read_to_string(policy_path)
|
||||
.with_context(|| format!("failed to read policy at {}", policy_path.display()))?;
|
||||
let policy_source = policy_path.to_string_lossy();
|
||||
let parser = PolicyParser::new(policy_source.as_ref(), &content);
|
||||
Ok(parser.parse()?)
|
||||
Ok(PolicyParser::parse(policy_source.as_ref(), &content)?)
|
||||
}
|
||||
|
||||
@@ -22,23 +22,14 @@ use crate::rule::PrefixPattern;
|
||||
use crate::rule::PrefixRule;
|
||||
use crate::rule::Rule;
|
||||
|
||||
pub struct PolicyParser {
|
||||
policy_source: String,
|
||||
unparsed_policy: String,
|
||||
}
|
||||
// todo: support parsing multiple policies
|
||||
pub struct PolicyParser;
|
||||
|
||||
impl PolicyParser {
|
||||
pub fn new(policy_source: &str, unparsed_policy: &str) -> Self {
|
||||
Self {
|
||||
policy_source: policy_source.to_string(),
|
||||
unparsed_policy: unparsed_policy.to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn parse(&self) -> Result<crate::policy::Policy> {
|
||||
pub fn parse(policy_source: &str, unparsed_policy: &str) -> Result<crate::policy::Policy> {
|
||||
let mut dialect = Dialect::Extended.clone();
|
||||
dialect.enable_f_strings = true;
|
||||
let ast = AstModule::parse(&self.policy_source, self.unparsed_policy.clone(), &dialect)
|
||||
let ast = AstModule::parse(policy_source, unparsed_policy.to_string(), &dialect)
|
||||
.map_err(|e| Error::Starlark(e.to_string()))?;
|
||||
let globals = GlobalsBuilder::standard().with(policy_builtins).build();
|
||||
let module = Module::new();
|
||||
|
||||
@@ -21,9 +21,7 @@ prefix_rule(
|
||||
pattern = ["git", "status"],
|
||||
)
|
||||
"#;
|
||||
let policy = PolicyParser::new("test.codexpolicy", policy_src)
|
||||
.parse()
|
||||
.expect("parse policy");
|
||||
let policy = PolicyParser::parse("test.codexpolicy", policy_src).expect("parse policy");
|
||||
let cmd = tokens(&["git", "status"]);
|
||||
let evaluation = policy.check(&cmd);
|
||||
assert_eq!(
|
||||
@@ -45,8 +43,7 @@ prefix_rule(
|
||||
pattern = [["bash", "sh"], ["-c", "-l"]],
|
||||
)
|
||||
"#;
|
||||
let parser = PolicyParser::new("test.codexpolicy", policy_src);
|
||||
let policy = parser.parse().expect("parse policy");
|
||||
let policy = PolicyParser::parse("test.codexpolicy", policy_src).expect("parse policy");
|
||||
|
||||
let bash_rules = policy.rules().get_vec("bash").expect("bash rules");
|
||||
let sh_rules = policy.rules().get_vec("sh").expect("sh rules");
|
||||
@@ -103,8 +100,7 @@ prefix_rule(
|
||||
pattern = ["npm", ["i", "install"], ["--legacy-peer-deps", "--no-save"]],
|
||||
)
|
||||
"#;
|
||||
let parser = PolicyParser::new("test.codexpolicy", policy_src);
|
||||
let policy = parser.parse().expect("parse policy");
|
||||
let policy = PolicyParser::parse("test.codexpolicy", policy_src).expect("parse policy");
|
||||
|
||||
let rules = policy.rules().get_vec("npm").expect("npm rules");
|
||||
assert_eq!(
|
||||
@@ -162,8 +158,7 @@ prefix_rule(
|
||||
],
|
||||
)
|
||||
"#;
|
||||
let parser = PolicyParser::new("test.codexpolicy", policy_src);
|
||||
let policy = parser.parse().expect("parse policy");
|
||||
let policy = PolicyParser::parse("test.codexpolicy", policy_src).expect("parse policy");
|
||||
let match_eval = policy.check(&tokens(&["git", "status"]));
|
||||
assert_eq!(
|
||||
Evaluation::Match {
|
||||
@@ -201,8 +196,7 @@ prefix_rule(
|
||||
decision = "forbidden",
|
||||
)
|
||||
"#;
|
||||
let parser = PolicyParser::new("test.codexpolicy", policy_src);
|
||||
let policy = parser.parse().expect("parse policy");
|
||||
let policy = PolicyParser::parse("test.codexpolicy", policy_src).expect("parse policy");
|
||||
|
||||
let status = policy.check(&tokens(&["git", "status"]));
|
||||
assert_eq!(
|
||||
|
||||
Reference in New Issue
Block a user