Skip to main content

Utility for validating COAR Notify payloads.

Project description

coar-notify-validator

Installation

pip install coar-notify-validator

Usage

validate()

Validate a COAR Notify payload against a schema determined by the payload's type value:

from coar_notify_validator.validate import validate

valid_payload = {
    "@context": [
        "https://www.w3.org/ns/activitystreams",
        "https://purl.org/coar/notify"
    ],
    "actor": {
        "id": "https://review-service.org/",
        "name": "Review Service",
        "type": "Service"
    },
    "context": {
        "id": "https://doi.org/10.1101/2022.10.06.511170"
    },
    "id": "urn:uuid:572b8e81-d92f-4ed5-8178-cc7f04f44cd1",
    "object": {
        "id": "https://review-service.org/reviews/1223155",
        "ietf:cite-as": "10.5072/zenodo.1223155",
        "type": [
            "Document",
            "sorg:Review"
        ]
    },
    "origin": {
        "id": "https://review-service.org/",
        "inbox": "https://review-service.org/inbox",
        "type": "Service"
    },
    "target": {
        "id": "https://preprint-repository.org/",
        "inbox": "https://preprint-repository.org/inbox",
        "type": "Service"
    },
    "type": [
        "Announce",
        "coar-notify:ReviewAction"
    ],
    "updated": "2022-10-06T15:00:00.000000"
}

conforms, errors = validate(valid_payload)

print(conforms)  # True
print(errors)  # []

invalid_payload = {
    "@context": [
        "https://www.w3.org/ns/activitystreams",
        "https://purl.org/coar/notify"
    ],
    "actor": {
        "id": "https://review-service.org/",
        "name": "Review Service",
        "type": "Service"
    },
    "context": {
        "id": "https://doi.org/10.1101/2022.10.06.511170"
    },
    "id": "urn:uuid:572b8e81-d92f-4ed5-8178-cc7f04f44cd1",
    "object": {
        "id": "https://review-service.org/reviews/1223155",
        "ietf:cite-as": "10.5072/zenodo.1223155",
        "type": [
            "Document",
            "sorg:Review"
        ]
    },
    "origin": {
        "id": "https://review-service.org/",
        "inbox": "https://review-service.org/inbox",
        "type": "Service"
    },
    "target": {
        "id": "https://preprint-repository.org/",
        # Missing inbox - should be required
        "type": "Service"
    },
    "type": [
        "Announce",
        "coar-notify:ReviewAction"
    ],
    "updated": "2022-10-06T15:00:00.000000"
}

conforms, errors = validate(valid_payload)
print(conforms)  # False
print(errors)
# [
#     {
#         "focus_node": "<https://preprint-repository.org/",
#         "message": "Less than 1 values on <https://preprint-repository.org/-ldp:inbox",
#         "result_path": "ldp:inbox",
#         "severity": "sh:Violation",
#         "source_shape": "ex:InboxShape"
#     }
# 
# ]

validate_by_shape_file()

Validate a COAR Notify payload against a specified schema:

from coar_notify_validator.shape_files import ShapefileType
from coar_notify_validator.validate import validate_by_shape_file

valid_payload = {
    "@context": [
        "https://www.w3.org/ns/activitystreams",
        "https://purl.org/coar/notify"
    ],
    "actor": {
        "id": "https://review-service.org/",
        "name": "Review Service",
        "type": "Service"
    },
    "context": {
        "id": "https://doi.org/10.1101/2022.10.06.511170"
    },
    "id": "urn:uuid:572b8e81-d92f-4ed5-8178-cc7f04f44cd1",
    "object": {
        "id": "https://review-service.org/reviews/1223155",
        "ietf:cite-as": "10.5072/zenodo.1223155",
        "type": [
            "Document",
            "sorg:Review"
        ]
    },
    "origin": {
        "id": "https://review-service.org/",
        "inbox": "https://review-service.org/inbox",
        "type": "Service"
    },
    "target": {
        "id": "https://preprint-repository.org/",
        "inbox": "https://preprint-repository.org/inbox",
        "type": "Service"
    },
    "type": [
        "Announce",
        "coar-notify:ReviewAction"
    ],
    "updated": "2022-10-06T15:00:00.000000"
}

conforms, errors = validate_by_shape_file(ShapefileType.ANNOUNCE_REVIEW, valid_payload)

print(conforms)  # True
print(errors)  # []

invalid_payload = {
    "@context": [
        "https://www.w3.org/ns/activitystreams",
        "https://purl.org/coar/notify"
    ],
    "actor": {
        "id": "https://review-service.org/",
        "name": "Review Service",
        "type": "Service"
    },
    "context": {
        "id": "https://doi.org/10.1101/2022.10.06.511170"
    },
    "id": "urn:uuid:572b8e81-d92f-4ed5-8178-cc7f04f44cd1",
    "object": {
        "id": "https://review-service.org/reviews/1223155",
        "ietf:cite-as": "10.5072/zenodo.1223155",
        "type": [
            "Document",
            "sorg:Review"
        ]
    },
    "origin": {
        "id": "https://review-service.org/",
        "inbox": "https://review-service.org/inbox",
        "type": "Service"
    },
    "target": {
        "id": "https://preprint-repository.org/",
        # Missing inbox - should be required
        "type": "Service"
    },
    "type": [
        "Announce",
        "coar-notify:ReviewAction"
    ],
    "updated": "2022-10-06T15:00:00.000000"
}

conforms, errors = validate_by_shape_file(ShapefileType.ANNOUNCE_REVIEW, invalid_payload)
print(conforms)  # False
print(errors)
# [
#     {
#         "focus_node": "<https://preprint-repository.org/",
#         "message": "Less than 1 values on <https://preprint-repository.org/-ldp:inbox",
#         "result_path": "ldp:inbox",
#         "severity": "sh:Violation",
#         "source_shape": "ex:InboxShape"
#     }
# 
# ]

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

coar_notify_validator-0.0.4.tar.gz (8.8 kB view hashes)

Uploaded Source

Built Distribution

coar_notify_validator-0.0.4-py3-none-any.whl (20.1 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page