Configuration¶
By default, invenio-sword’s configuration mirrors the default configuration for invenio-deposit. It’s possible to have
multiple SWORD endpoints, each depositing using a different pid_type
. The default pid_type
is "depid"
.
_PID = 'pid(depid,record_class="invenio_sword.api:SWORDDeposit")'
SWORD_ENDPOINTS = {
name: {
**options,
"packaging_formats": {
ep.name: ep.load()
for ep in pkg_resources.iter_entry_points("invenio_sword.packaging")
},
"metadata_formats": {
ep.name: ep.load()
for ep in pkg_resources.iter_entry_points("invenio_sword.metadata")
},
"default_packaging_format": "http://purl.org/net/sword/3.0/package/Binary",
"default_metadata_format": "http://purl.org/net/sword/3.0/types/Metadata",
"record_class": "invenio_sword.api:Deposit",
"default_media_type": "application/ld+json",
# Permissions
"create_permission_factory_imp": permissions.check_has_write_scope,
"read_permission_factory_imp": permissions.check_is_record_owner,
"update_permission_factory_imp": permissions.check_has_write_scope_and_is_record_owner,
"delete_permission_factory_imp": permissions.check_has_write_scope_and_is_record_owner,
"service_document_route": "/sword/service-document",
"item_route": "/sword/deposit/<{}:pid_value>".format(_PID),
"metadata_route": "/sword/deposit/<{}:pid_value>/metadata".format(_PID),
"fileset_route": "/sword/deposit/<{}:pid_value>/fileset".format(_PID),
"file_route": "/sword/deposit/<{}:pid_value>/file/<path:key>".format(_PID),
}
for name, options in DEPOSIT_REST_ENDPOINTS.items()
}
Permissions configuration¶
You currently need to configure invenio-files-rest to allow all access to files:
# This allows access to files across all of invenio-files-rest
FILES_REST_PERMISSION_FACTORY = lambda *a, **kw: type(
"Allow", (object,), {"can": lambda self: True}
)()
This needs a better solution in invenio-sword.