mirror of https://github.com/nucypher/nucypher.git
support primitive responses for JsonApiCondition
parent
3f2e3df059
commit
c8e7d5eac3
|
@ -51,7 +51,7 @@ class JsonApiCondition(AccessControlCondition):
|
|||
)
|
||||
parameters = fields.Dict(required=False)
|
||||
endpoint = Url(required=True, relative=False, schemes=["https"])
|
||||
query = JSONPathField(required=True)
|
||||
query = JSONPathField(required=False, allow_none=True)
|
||||
return_value_test = fields.Nested(
|
||||
ReturnValueTest.ReturnValueTestSchema(), required=True
|
||||
)
|
||||
|
@ -63,8 +63,8 @@ class JsonApiCondition(AccessControlCondition):
|
|||
def __init__(
|
||||
self,
|
||||
endpoint: str,
|
||||
query: Optional[str],
|
||||
return_value_test: ReturnValueTest,
|
||||
query: Optional[str] = None,
|
||||
parameters: Optional[dict] = None,
|
||||
condition_type: str = ConditionType.JSONAPI.value,
|
||||
):
|
||||
|
@ -131,6 +131,8 @@ class JsonApiCondition(AccessControlCondition):
|
|||
return data
|
||||
|
||||
def query_response(self, data: Any) -> Any:
|
||||
if not self.query:
|
||||
return data # primitive value
|
||||
try:
|
||||
expression = parse(self.query)
|
||||
matches = expression.find(data)
|
||||
|
|
|
@ -65,6 +65,19 @@ def test_https_enforcement():
|
|||
assert "Not a valid URL" in str(excinfo.value)
|
||||
|
||||
|
||||
def test_json_api_condition_with_primitive_response(mocker):
|
||||
mock_response = mocker.Mock(status_code=200)
|
||||
mock_response.json.return_value = 1
|
||||
mocker.patch("requests.get", return_value=mock_response)
|
||||
|
||||
condition = JsonApiCondition(
|
||||
endpoint="https://api.example.com/data",
|
||||
return_value_test=ReturnValueTest("==", 1),
|
||||
)
|
||||
success, result = condition.verify()
|
||||
assert success is True
|
||||
|
||||
|
||||
def test_json_api_condition_fetch(mocker):
|
||||
mock_response = mocker.Mock(status_code=200)
|
||||
mock_response.json.return_value = {"store": {"book": [{"title": "Test Title"}]}}
|
||||
|
|
Loading…
Reference in New Issue