Skip to content

Commit

Permalink
Merge pull request #22 from oarepo/krist/various-minor-edits
Browse files Browse the repository at this point in the history
Krist/various minor edits
  • Loading branch information
SilvyPuzzlewell authored May 29, 2024
2 parents 4cb64a7 + 4fe0fa5 commit 1285637
Show file tree
Hide file tree
Showing 25 changed files with 196 additions and 173 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
oarepo:
description: OARepo version (11, 12, ...)
required: true
default: 11
default: 12
type: string

env:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/manual.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
oarepo:
description: OARepo version (11, 12, ...)
required: true
default: 11
default: 12

jobs:
build:
Expand Down
6 changes: 1 addition & 5 deletions .github/workflows/push.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,6 @@ permissions:
contents: read

jobs:
build11:
uses: ./.github/workflows/build.yaml
with:
oarepo: 11

build12:
uses: ./.github/workflows/build.yaml
Expand All @@ -19,7 +15,7 @@ jobs:

publish:
runs-on: ubuntu-latest
needs: build11
needs: build12
steps:
- name: Use built artifacts
uses: actions/download-artifact@v3
Expand Down
9 changes: 3 additions & 6 deletions oarepo_requests/actions/delete_topic.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
from invenio_records_resources.services.uow import RecordDeleteOp

# from .generic import AcceptAction
from invenio_requests.customizations import actions

from ..utils import get_matching_service_for_record
Expand All @@ -9,11 +6,11 @@
class DeleteTopicAcceptAction(actions.AcceptAction):
log_event = True

def execute(self, identity, uow):
def execute(self, identity, uow, *args, **kwargs):
topic = self.request.topic.resolve()
topic_service = get_matching_service_for_record(topic)
if not topic_service:
raise KeyError(f"topic {topic} service not found")
uow.register(RecordDeleteOp(topic, topic_service.indexer, index_refresh=True))
# topic_service.delete(identity, id_, revision_id=None, uow=None)
# uow.register(RecordDeleteOp(topic, topic_service.indexer, index_refresh=True))
topic_service.delete(identity, topic["id"], uow=uow, *args, **kwargs)
super().execute(identity, uow)
1 change: 0 additions & 1 deletion oarepo_requests/actions/edit_topic.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# from .generic import AcceptAction
from invenio_requests.customizations import actions

from ..utils import get_matching_service_for_record
Expand Down
90 changes: 0 additions & 90 deletions oarepo_requests/actions/generic.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,93 +12,3 @@ def execute(self, identity, uow):
if not action_obj.can_execute():
raise CannotExecuteActionError("accept")
action_obj.execute(identity, uow)


"""
not needed for now
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):
def execute(self, identity, uow):
super().execute(identity, uow)
set_request_on_parent(self.request, uow)
class AcceptAction(actions.AcceptAction):
def execute(self, identity, uow):
super().execute(identity, uow)
unset_request_on_parent(self.request, uow)
class DeleteAction(actions.DeleteAction):
def execute(self, identity, uow):
super().execute(identity, uow)
unset_request_on_parent(self.request, uow)
class CancelAction(actions.CancelAction):
def execute(self, identity, uow):
super().execute(identity, uow)
unset_request_on_parent(self.request, uow)
class ExpireAction(actions.ExpireAction):
def execute(self, identity, uow):
super().execute(identity, uow)
unset_request_on_parent(self.request, uow)
class DeclineAction(actions.DeclineAction):
def execute(self, identity, uow):
super().execute(identity, uow)
unset_request_on_parent(self.request, uow)
"""
8 changes: 4 additions & 4 deletions oarepo_requests/actions/publish_draft.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,18 @@
from ..utils import get_matching_service_for_record


def publish_draft(draft, identity, uow):
def publish_draft(draft, identity, uow, *args, **kwargs):
topic_service = get_matching_service_for_record(draft)
if not topic_service:
raise KeyError(f"topic {draft} service not found")
id_ = draft["id"]
topic_service.publish(identity, id_, uow=uow, expand=False)
topic_service.publish(identity, id_, uow=uow, expand=False, *args, **kwargs)


class PublishDraftAcceptAction(actions.AcceptAction):
log_event = True

def execute(self, identity, uow):
def execute(self, identity, uow, *args, **kwargs):
topic = self.request.topic.resolve()
publish_draft(topic, identity, uow)
publish_draft(topic, identity, uow, *args, **kwargs)
super().execute(identity, uow)
25 changes: 11 additions & 14 deletions oarepo_requests/resolvers/ui.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,6 @@ def _resolve(self, record, reference):
raise NotImplementedError("Parent entity ui resolver should be abstract")

def resolve_one(self, identity, reference):
# todo - control if reference aligns with reference_type
# reference is on input for copying the invenio pattern (?)
record = self._search_one(identity, reference)
if not record:
return fallback_result(reference)
Expand All @@ -76,34 +74,33 @@ def _get_id(self, result):

def _search_many(self, identity, values, *args, **kwargs):
result = []
for user in values:
for group in values:
try:
user = current_groups_service.read(identity, user)
result.append(user)
group = current_groups_service.read(identity, group)
result.append(group)
except PermissionDeniedError:
pass
return result

def _search_one(self, identity, reference, *args, **kwargs):
value = list(reference.values())[0]
try:
user = current_groups_service.read(identity, value)
return user
group = current_groups_service.read(identity, value)
return group
except PermissionDeniedError:
return None

def _resolve(self, record, reference):
# todo; this is copyied from user
if record.data["username"] is None: # username undefined?
if "email" in record.data:
label = record.data["email"]
if record.data["name"] is None:
if "id" in record.data:
label = record.data["id"]
else:
label = fallback_label_result(reference)
else:
label = record.data["username"]
label = record.data["name"]
ret = {
"reference": reference,
"type": "user",
"type": "group",
"label": label,
}
if "links" in record.data and "self" in record.data["links"]:
Expand Down Expand Up @@ -159,6 +156,7 @@ def _search_many(self, identity, values, *args, **kwargs):
# using values instead of references breaks the pattern, perhaps it's lesser evil to construct them on go?
if not values:
return []
# todo what if search not permitted?
service = get_matching_service_for_refdict(
{self.reference_type: list(values)[0]}
)
Expand Down Expand Up @@ -192,7 +190,6 @@ def _search_many(self, identity, values, *args, **kwargs):
service = get_matching_service_for_refdict(
{self.reference_type: list(values)[0]}
)
# todo extra filter doesn't work in rdm-11
filter = dsl.Q("terms", **{"id": list(values)})
try:
ret = list(service.search_drafts(identity, extra_filter=filter).hits)
Expand Down
1 change: 0 additions & 1 deletion oarepo_requests/resources/draft/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@


class DraftRecordRequestsResourceConfig(RecordRequestsResourceConfig):
""""""

routes = {
**RecordRequestsResourceConfig.routes,
Expand Down
1 change: 0 additions & 1 deletion oarepo_requests/resources/events/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
class OARepoRequestsCommentsResourceConfig(
RequestCommentsResourceConfig, ConfiguratorMixin
):
""""""

blueprint_name = "oarepo_request_events"
url_prefix = "/requests"
Expand Down
6 changes: 4 additions & 2 deletions oarepo_requests/resources/oarepo/resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from invenio_requests.proxies import current_requests_service
from invenio_requests.resources import RequestsResource

from oarepo_requests.utils import stringify_first_val
from oarepo_requests.utils import resolve_reference_dict, stringify_first_val


class OARepoRequestsResource(RequestsResource, ErrorHandlersMixin):
Expand Down Expand Up @@ -71,7 +71,9 @@ def create(self):
data=resource_requestctx.data,
request_type=resource_requestctx.data.pop("request_type", None),
topic=(
stringify_first_val(resource_requestctx.data.pop("topic", None))
resolve_reference_dict(
stringify_first_val(resource_requestctx.data.pop("topic", None))
)
if resource_requestctx.data
else None
),
Expand Down
3 changes: 2 additions & 1 deletion oarepo_requests/services/oarepo/service.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from invenio_records.api import RecordBase
from invenio_records_resources.services.uow import IndexRefreshOp, unit_of_work
from invenio_requests import current_request_type_registry
from invenio_requests.services import RequestsService
Expand All @@ -15,7 +16,7 @@ def create(
request_type,
receiver=None,
creator=None,
topic=None,
topic: RecordBase = None,
expires_at=None,
uow=None,
expand=False,
Expand Down
36 changes: 19 additions & 17 deletions oarepo_requests/services/results.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from invenio_records_resources.services.errors import PermissionDeniedError
from oarepo_runtime.services.results import ResultsComponent

from oarepo_requests.services.schema import RequestTypeSchema
from oarepo_requests.utils import (
Expand All @@ -8,8 +9,8 @@
)


class RequestTypesComponent:
def update_data(self, identity, record, projection):
class RequestTypesComponent(ResultsComponent):
def update_data(self, identity, record, projection, expand):
request_types_list = []
allowed_request_types = allowed_request_types_for_record(record)
for request_name, request_type in allowed_request_types.items():
Expand All @@ -30,18 +31,19 @@ def update_data(self, identity, record, projection):
projection["request_types"] = request_types_list


class RequestsComponent:
def update_data(self, identity, record, projection):
service = get_requests_service_for_records_service(
get_matching_service_for_record(record)
)
reader = (
service.search_requests_for_draft
if getattr(record, "is_draft", False)
else service.search_requests_for_record
)
try:
requests = list(reader(identity, record["id"]).hits)
except PermissionDeniedError:
requests = []
projection["requests"] = requests
class RequestsComponent(ResultsComponent):
def update_data(self, identity, record, projection, expand):
if expand:
service = get_requests_service_for_records_service(
get_matching_service_for_record(record)
)
reader = (
service.search_requests_for_draft
if getattr(record, "is_draft", False)
else service.search_requests_for_record
)
try:
requests = list(reader(identity, record["id"]).hits)
except PermissionDeniedError:
requests = []
projection["requests"] = requests
Loading

0 comments on commit 1285637

Please sign in to comment.