Skip to content

Commit

Permalink
Merge pull request #250 from oarepo/miroslavsimek/be-345-create-a-for…
Browse files Browse the repository at this point in the history
…mconfig-generator-in-ui-resources

feat: /config/<abc>/form endpoint serving form config for abc
  • Loading branch information
mirekys authored Nov 7, 2024
2 parents 2685f69 + ced20ab commit e954b6d
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 2 deletions.
5 changes: 5 additions & 0 deletions oarepo_ui/resources/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,11 +87,16 @@ class RecordsUIResourceConfig(UIResourceConfig):
"preview": "/<pid_value>/preview",
"file_preview": "/<pid_value>/files/<path:filepath>/preview",
}
config_url_prefix = '/configs'
config_routes = {
'form_config': 'form',
}
request_view_args = {"pid_value": ma.fields.Str()}
request_file_view_args = {**request_view_args, "filepath": ma.fields.Str()}
request_export_args = {"export_format": ma.fields.Str()}
request_search_args = {"page": ma.fields.Integer(), "size": ma.fields.Integer()}
request_create_args = {"community": ma.fields.Str()}
request_form_config_view_args = {}

app_contexts = None
ui_serializer = None
Expand Down
51 changes: 50 additions & 1 deletion oarepo_ui/resources/resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from typing import TYPE_CHECKING, Iterator

import deepmerge
from flask import Response, abort, g, redirect, request
from flask import Response, abort, g, redirect, request, Blueprint
from flask_principal import PermissionDenied
from flask_resources import (
Resource,
Expand Down Expand Up @@ -63,6 +63,10 @@

request_create_args = request_parser(from_conf("request_create_args"), location="args")

request_form_config_view_args = request_parser(
from_conf("request_form_config_view_args"), location="view_args"
)


class UIComponentsMixin:
#
Expand Down Expand Up @@ -148,11 +152,22 @@ def __init__(self, config=None):
"""Constructor."""
super(UIResource, self).__init__(config)

def create_blueprint(self, **options):
"""Create the blueprint.
Override this function to customize the creation of the ``Blueprint``
object itself.
"""
# do not set up the url prefix unline normal resource,
# as RecordsUIResource is on two endpoints - /configs/abc and /abc
return Blueprint(self.config.blueprint_name, __name__, **options)

def create_url_rules(self):
"""Create the URL rules for the record resource."""
routes = []
route_config = self.config.routes
for route_name, route_url in route_config.items():
route_url = self.config.url_prefix.rstrip('/') + "/" + route_url.lstrip('/')
if route_name == "search":
search_route = route_url
if not search_route.endswith("/"):
Expand All @@ -168,6 +183,22 @@ def create_url_rules(self):
)
else:
routes.append(route("GET", route_url, getattr(self, route_name)))

for route_name, route_url in self.config.config_routes.items():
if route_url:
route_url = "{config_prefix}/{url_prefix}/{route}".format(
config_prefix=self.config.config_url_prefix.rstrip('/'),
url_prefix=self.config.url_prefix.strip('/'),
route=route_url.lstrip('/')
)
else:
route_url = "{config_prefix}/{url_prefix}".format(
config_prefix=self.config.config_url_prefix.rstrip('/'),
url_prefix=self.config.url_prefix.strip('/')
)

routes.append(route("GET", route_url, getattr(self, route_name)))

return routes

def empty_record(self, resource_requestctx, **kwargs):
Expand Down Expand Up @@ -684,6 +715,24 @@ def permission_denied(self, error, *args, **kwargs):
)


@request_form_config_view_args
def form_config(self):
form_config = self._get_form_config(identity=g.identity)
self.run_components(
"form_config",
form_config=form_config,
api_record=None,
record=None,
data=None,
ui_links=None,
extra_context=None,
args = resource_requestctx.args,
view_args=resource_requestctx.view_args,
identity=g.identity,
)
return form_config


# ported from https://github.com/inveniosoftware/invenio-app-rdm/blob/b1951f436027ad87214912e17c176727270e5e87/invenio_app_rdm/records_ui/views/records.py#L337
class PreviewFile:
"""Preview file implementation for InvenioRDM.
Expand Down
2 changes: 1 addition & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[metadata]
name = oarepo-ui
version = 5.2.22
version = 5.2.23
description = UI module for invenio 3.5+
long_description = file: README.md
long_description_content_type = text/markdown
Expand Down

0 comments on commit e954b6d

Please sign in to comment.