Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions crates/jsonschema-py/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -597,16 +597,16 @@ thread_local! {
static LAST_FORMAT_ERROR: RefCell<Option<PyErr>> = const { RefCell::new(None) };
}

fn make_options(
fn make_options<'a>(
draft: Option<u8>,
formats: Option<&Bound<'_, PyDict>>,
validate_formats: Option<bool>,
ignore_unknown_formats: Option<bool>,
retriever: Option<&Bound<'_, PyAny>>,
registry: Option<&registry::Registry>,
registry: Option<&'a registry::Registry>,
base_uri: Option<String>,
pattern_options: Option<&Bound<'_, PyAny>>,
) -> PyResult<jsonschema::ValidationOptions> {
) -> PyResult<jsonschema::ValidationOptions<'a>> {
let mut options = jsonschema::options();
if let Some(raw_draft_version) = draft {
options = options.with_draft(get_draft(raw_draft_version)?);
Expand Down Expand Up @@ -652,7 +652,7 @@ fn make_options(
options = options.with_retriever(Retriever { func });
}
if let Some(registry) = registry {
options = options.with_registry(registry.inner.clone());
options = options.with_registry(&registry.inner);
}
if let Some(base_uri) = base_uri {
options = options.with_base_uri(base_uri);
Expand Down Expand Up @@ -1539,7 +1539,7 @@ mod meta {
let schema = crate::ser::to_value(schema)?;
let result = if let Some(registry) = registry {
jsonschema::meta::options()
.with_registry(registry.inner.clone())
.with_registry(&registry.inner)
.validate(&schema)
} else {
jsonschema::meta::validate(&schema)
Expand Down Expand Up @@ -1588,7 +1588,7 @@ mod meta {
let schema = crate::ser::to_value(schema)?;
let result = if let Some(registry) = registry {
jsonschema::meta::options()
.with_registry(registry.inner.clone())
.with_registry(&registry.inner)
.validate(&schema)
} else {
jsonschema::meta::validate(&schema)
Expand Down
2 changes: 1 addition & 1 deletion crates/jsonschema-py/src/registry.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use crate::{get_draft, retriever::into_retriever, to_value, Retriever};
/// A registry of JSON Schema resources, each identified by their canonical URIs.
#[pyclass]
pub(crate) struct Registry {
pub(crate) inner: jsonschema::Registry,
pub(crate) inner: jsonschema::Registry<'static>,
}

#[pymethods]
Expand Down
11 changes: 7 additions & 4 deletions crates/jsonschema-referencing/benches/anchor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,13 @@ fn bench_anchor_lookup(c: &mut Criterion) {
BenchmarkId::new("resolve", "small"),
&registry,
|b, registry| {
let resolver = registry
.try_resolver("http://example.com/")
.expect("Invalid base URI");
b.iter_with_large_drop(|| resolver.lookup(black_box("#foo")));
let context = registry.context();
b.iter_with_large_drop(|| {
let resolver = context
.try_resolver("http://example.com/")
.expect("Invalid base URI");
resolver.lookup(black_box("#foo"))
});
},
);

Expand Down
11 changes: 7 additions & 4 deletions crates/jsonschema-referencing/benches/pointer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,13 @@ fn bench_pointers(c: &mut Criterion) {
BenchmarkId::new("pointer", name),
&registry,
|b, registry| {
let resolver = registry
.try_resolver("http://example.com/schema.json")
.expect("Invalid base URI");
b.iter_with_large_drop(|| resolver.lookup(black_box(pointer)));
let context = registry.context();
b.iter_with_large_drop(|| {
let resolver = context
.try_resolver("http://example.com/schema.json")
.expect("Invalid base URI");
resolver.lookup(black_box(pointer))
});
},
);
}
Expand Down
36 changes: 18 additions & 18 deletions crates/jsonschema-referencing/benches/registry.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,20 @@ fn bench_subresources(c: &mut Criterion) {
for (draft, data, name) in &drafts {
let schema = benchmark::read_json(data);

group.bench_with_input(BenchmarkId::new("try_new", name), &schema, |b, schema| {
b.iter_batched(
|| draft.create_resource(schema.clone()),
|resource| {
Registry::try_new("http://example.com/schema.json", resource)
.expect("Invalid registry input")
},
BatchSize::SmallInput,
);
});
let schema_ref = draft.create_resource_ref(&schema);
group.bench_with_input(
BenchmarkId::new("try_new", name),
&schema_ref,
|b, schema_ref| {
b.iter(|| {
Registry::try_new(
"http://example.com/schema.json",
(schema_ref.contents(), schema_ref.draft()),
)
.expect("Invalid registry input")
});
},
);
}
let drafts = [
(Draft::Draft4, benchmark::GEOJSON, "GeoJSON"),
Expand All @@ -50,14 +54,10 @@ fn bench_subresources(c: &mut Criterion) {
&schema,
|b, schema| {
b.iter_batched(
|| {
(
draft.create_resource(schema.clone()),
SPECIFICATIONS.clone(),
)
},
|(resource, registry)| {
registry.try_with_resource("http://example.com/schema.json", resource)
|| SPECIFICATIONS.clone(),
|registry| {
registry
.try_with_resource("http://example.com/schema.json", (schema, *draft))
},
BatchSize::SmallInput,
);
Expand Down
29 changes: 19 additions & 10 deletions crates/jsonschema-referencing/src/anchors/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ impl Anchor {
Anchor::Dynamic { name, resource } => {
let mut last = resource;
for uri in &resolver.dynamic_scope() {
match resolver.registry.anchor(uri, name.as_str()) {
match resolver.context.anchor(uri, name.as_str()) {
Ok(anchor) => {
if let Anchor::Dynamic { resource, .. } = anchor {
last = resource;
Expand Down Expand Up @@ -216,7 +216,8 @@ mod tests {
let one = Draft::Draft202012.create_resource(json!({"$dynamicAnchor": "foo"}));
let registry =
Registry::try_new("http://example.com", one.clone()).expect("Invalid resources");
let resolver = registry
let context = registry.context();
let resolver = context
.try_resolver("http://example.com")
.expect("Invalid base URI");
let resolved = resolver.lookup("#foo").expect("Lookup failed");
Expand Down Expand Up @@ -249,7 +250,8 @@ mod tests {
("http://example.com/foo/bar".to_string(), root.clone()),
])
.expect("Invalid resources");
let resolver = registry
let context = registry.context();
let resolver = context
.try_resolver("http://example.com")
.expect("Invalid base URI");

Expand Down Expand Up @@ -290,7 +292,8 @@ mod tests {
("http://example.com/foo/bar".to_string(), two.clone()),
])
.expect("Invalid resources");
let resolver = registry
let context = registry.context();
let resolver = context
.try_resolver("http://example.com")
.expect("Invalid base URI");

Expand All @@ -312,7 +315,8 @@ mod tests {
}
}));
let registry = Registry::try_new("http://example.com", schema).expect("Invalid resources");
let resolver = registry
let context = registry.context();
let resolver = context
.try_resolver("http://example.com")
.expect("Invalid base URI");

Expand All @@ -331,7 +335,8 @@ mod tests {
}
}));
let registry = Registry::try_new("http://example.com", schema).expect("Invalid resources");
let resolver = registry
let context = registry.context();
let resolver = context
.try_resolver("http://example.com")
.expect("Invalid base URI");

Expand All @@ -347,7 +352,8 @@ mod tests {
let one = Draft::Draft201909.create_resource(json!({"$recursiveAnchor": true}));
let registry =
Registry::try_new("http://example.com", one.clone()).expect("Invalid resources");
let resolver = registry
let context = registry.context();
let resolver = context
.try_resolver("http://example.com")
.expect("Invalid base URI");
let first = resolver.lookup("").expect("Lookup failed");
Expand All @@ -363,7 +369,8 @@ mod tests {
let true_resource = Draft::Draft201909.create_resource(json!(true));
let registry = Registry::try_new("http://example.com", true_resource.clone())
.expect("Invalid resources");
let resolver = registry
let context = registry.context();
let resolver = context
.try_resolver("http://example.com")
.expect("Invalid base URI");
let resolved = resolver.lookup_recursive_ref().expect("Lookup failed");
Expand Down Expand Up @@ -398,7 +405,8 @@ mod tests {
])
.expect("Invalid resources");

let resolver = registry
let context = registry.context();
let resolver = context
.try_resolver("http://example.com")
.expect("Invalid base URI");
let first = resolver.lookup("").expect("Lookup failed");
Expand Down Expand Up @@ -440,7 +448,8 @@ mod tests {
])
.expect("Invalid resources");

let resolver = registry
let context = registry.context();
let resolver = context
.try_resolver("http://example.com")
.expect("Invalid base URI");
let first = resolver.lookup("").expect("Lookup failed");
Expand Down
Loading
Loading