Skip to content

Commit

Permalink
using array, format
Browse files Browse the repository at this point in the history
  • Loading branch information
Ronald Krist committed Jan 4, 2024
1 parent b15d8c8 commit d357421
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 11 deletions.
89 changes: 89 additions & 0 deletions oarepo_requests/actions/generic.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
from invenio_records_resources.services.uow import RecordCommitOp
from invenio_requests.customizations import actions

from ..utils import get_matching_service


def set_request_on_parent(request, uow):
topic = request.topic.resolve()
topic_service = get_matching_service(topic)
if topic is not None:
setattr(topic.parent, request.type.type_id, request)
uow.register(
RecordCommitOp(topic, indexer=topic_service.indexer, index_refresh=True)
)
"""
# the database query for topic parent is needed only for this; i'm leaving it here for reference and explanation
for ext in topic.parent._extensions:
from invenio_records.systemfields.base import SystemFieldsExt
if isinstance(ext, SystemFieldsExt):
ext.declared_fields[request.type.type_id].pre_commit(topic.parent)
"""
uow.register(RecordCommitOp(topic.parent))


def unset_request_on_parent(request, uow):
topic = request.topic.resolve()
if topic is not None:
setattr(topic.parent, request.type.type_id, None)
uow.register(RecordCommitOp(topic.parent, index_refresh=True))


class CreateAction(actions.CreateAction):
def execute(self, identity, uow):
super().execute(identity, uow)
set_request_on_parent(self.request, uow)


class SubmitAction(actions.SubmitAction):
def execute(self, identity, uow):
super().execute(identity, uow)
set_request_on_parent(self.request, uow)


class CreateAndSubmitAction(actions.CreateAndSubmitAction):
"""Create and submit a request."""

def execute(self, identity, uow):
super().execute(identity, uow)
set_request_on_parent(self.request, uow)


class AcceptAction(actions.AcceptAction):
"""Delete a request."""

def execute(self, identity, uow):
super().execute(identity, uow)
unset_request_on_parent(self.request, uow)


class DeleteAction(actions.DeleteAction):
"""Delete a request."""

def execute(self, identity, uow):
super().execute(identity, uow)
unset_request_on_parent(self.request, uow)


class CancelAction(actions.CancelAction):
"""Cancel a request."""

def execute(self, identity, uow):
super().execute(identity, uow)
unset_request_on_parent(self.request, uow)


class ExpireAction(actions.ExpireAction):
"""Expire a request."""

def execute(self, identity, uow):
super().execute(identity, uow)
unset_request_on_parent(self.request, uow)


class DeclineAction(actions.DeclineAction):
"""Expire a request."""

def execute(self, identity, uow):
super().execute(identity, uow)
unset_request_on_parent(self.request, uow)
22 changes: 11 additions & 11 deletions oarepo_requests/services/results.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
from collections import defaultdict

from oarepo_runtime.services.results import RecordList, RecordItem
from invenio_requests.services.requests.links import RequestLinksTemplate
from invenio_requests.proxies import current_requests_service
from invenio_requests.services.requests.links import RequestLinksTemplate
from oarepo_runtime.services.results import RecordItem, RecordList


class RequestsMixin:
def _process_requests(self, projection, record, *args, **kwargs):
requests = defaultdict(dict)
requests = []
# expand links for all available actions on the request
for request_type in self._service.config.request_types:
request = getattr(record.parent, request_type, None)
Expand All @@ -14,19 +15,18 @@ def _process_requests(self, projection, record, *args, **kwargs):
requests_template = RequestLinksTemplate(
self._service.config.requests_links_item,
self._service.config.requests_action_link,
context={"permission_policy_cls": current_requests_service.config.permission_policy_cls}
context={
"permission_policy_cls": current_requests_service.config.permission_policy_cls
},
)
requests[request_type] = requests_template.expand(self._identity, request)
requests[request_type]["type"] = request_type
requests_links = requests_template.expand(self._identity, request)
requests.append({"links": requests_links, "type": request_type})
projection["requests"] = requests


class RequestsAwareRecordItem(RecordItem, RequestsMixin):
"""Requests aware record result."""


class RequestsAwareRecordList(RecordList, RequestsMixin):
"""List of requests aware records result."""




0 comments on commit d357421

Please sign in to comment.