Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Alternative Schema Locations #1753

Merged
merged 30 commits into from
Mar 23, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
95dceec
add importlib_resources backport
kratsg Jan 24, 2022
3986a08
update schema loading to use the importlib
kratsg Jan 24, 2022
b36a615
drop pkg_resources from the utils
kratsg Jan 24, 2022
203c3c4
clarify the exception coverage
kratsg Jan 24, 2022
81a196e
migrate to getting version passed only into validate, but not load_sc…
kratsg Jan 24, 2022
effb164
base_uri should be full uri
kratsg Jan 24, 2022
ba4fa60
minor change
kratsg Jan 24, 2022
41f9735
refactor so we can override it via pyhf.utils.schemas
kratsg Jan 24, 2022
434b94f
fix up test to change signature for load_schema
kratsg Jan 24, 2022
9ea9f9d
drop pkg_resources
kratsg Jan 24, 2022
5148451
fix typo
kratsg Jan 24, 2022
5a83b80
matthew's suggestion fixes
kratsg Mar 22, 2022
492c3af
migrate schema utilities to a different location
kratsg Mar 22, 2022
39be7e5
fix up
kratsg Mar 22, 2022
a5f7cbc
update docs
kratsg Mar 22, 2022
58a979e
update tests
kratsg Mar 22, 2022
ba91e3c
fix up public api more
kratsg Mar 22, 2022
47192a7
check that things work
kratsg Mar 22, 2022
ab056a2
fix strpath
kratsg Mar 22, 2022
2ee03ab
last error
kratsg Mar 22, 2022
59319e6
fix contrib
kratsg Mar 22, 2022
6b0573e
add docs and example
kratsg Mar 23, 2022
9a2b834
add info about the module itself
kratsg Mar 23, 2022
a245353
minor tweak to api docs
kratsg Mar 23, 2022
f17f67d
fix
kratsg Mar 23, 2022
186903b
Update setup.cfg
kratsg Mar 23, 2022
12f7d59
Update src/pyhf/schema/loader.py
kratsg Mar 23, 2022
75bd603
Update src/pyhf/schema/variables.py
kratsg Mar 23, 2022
d46b82d
Update src/pyhf/utils.py
kratsg Mar 23, 2022
8b38df6
feickert suggestion
kratsg Mar 23, 2022
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
Prev Previous commit
Next Next commit
add docs and example
  • Loading branch information
kratsg committed Mar 23, 2022
commit 6b0573eb1d62b3ad5520f37069677e8d1950a17b
2 changes: 1 addition & 1 deletion docs/api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -168,12 +168,12 @@ Schema
:toctree: _generated/
:nosignatures:

Schema
load_schema
path
validate
version


Exceptions
----------

Expand Down
33 changes: 33 additions & 0 deletions src/pyhf/schema/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,48 @@ def __dir__():


class Schema(sys.modules[__name__].__class__):
"""
A module-level wrapper around ``pyhf.schema`` which will provide additional functionality for interacting with schemas.

Example:
>>> import pyhf.schema
>>> import pathlib
>>> curr_path = pyhf.schema.path
>>> curr_path # doctest: +ELLIPSIS
PosixPath('.../pyhf/schemas')
>>> pyhf.schema(pathlib.Path('/home/root/my/new/path'))
>>> pyhf.schema.path
PosixPath('/home/root/my/new/path')
>>> pyhf.schema(curr_path)
>>> pyhf.schema.path # doctest: +ELLIPSIS
PosixPath('.../pyhf/schemas')

"""

def __call__(self, new_path: pathlib.Path):
"""
Change the local search path for finding schemas locally.

Args:
new_path (pathlib.Path): Path to folder containing the schemas

Returns:
None
"""
variables.schemas = new_path

@property
def path(self):
"""
The local path for schemas.
"""
return variables.schemas

@property
def version(self):
"""
The default version used for finding schemas.
"""
return variables.SCHEMA_VERSION


Expand Down
11 changes: 10 additions & 1 deletion src/pyhf/schema/loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,16 @@
import importlib_resources as resources
matthewfeickert marked this conversation as resolved.
Show resolved Hide resolved


def load_schema(schema_id):
def load_schema(schema_id: str):
"""
Get a schema by relative path from cache, or load it into the cache and return.

Args:
schema_id (str): Relative path to schema from :attr:`pyhf.schema.path`

Returns:
schema (dict): The loaded schema.
"""
try:
return variables.SCHEMA_CACHE[
f'{Path(variables.SCHEMA_BASE).joinpath(schema_id)}'
Expand Down
18 changes: 17 additions & 1 deletion src/pyhf/schema/validator.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,25 @@
import pyhf.exceptions
from pyhf.schema.loader import load_schema
from pyhf.schema import variables
from typing import Union


def validate(spec, schema_name, version=None):
def validate(spec: dict, schema_name: str, version: Union[str, None] = None):
matthewfeickert marked this conversation as resolved.
Show resolved Hide resolved
"""
Validate a provided specification against a schema.

Args:
spec (dict): The specification to validate.
schema_name (str): The name of the schema to use.
version (None or str): The version to use if not the default from :attr:`pyhf.schema.version`.

Returns:
None: schema validated fine

Raises:
pyhf.exceptions.InvalidSpecification: the specification is invalid
"""

version = version or variables.SCHEMA_VERSION

schema = load_schema(f'{version}/{schema_name}')
Expand Down