Skip to content

Commit

Permalink
Merge pull request #3 from oarepo/ext-service-hardcode
Browse files Browse the repository at this point in the history
Ext service hardcode
  • Loading branch information
SilvyPuzzlewell authored Jun 28, 2023
2 parents 63d8a03 + 7214d97 commit a7bfa2b
Show file tree
Hide file tree
Showing 47 changed files with 968 additions and 380 deletions.
11 changes: 6 additions & 5 deletions build-tests/thesis.yaml
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
model:
record:
properties:
metadata:
properties:
title:
type: fulltext
status:
type: keyword
module:
qualified: thesis
permissions:
presets:
- everyone
package: thesis
schema-server: 'local://'
presets: [ 'everyone' ]
# package: thesis
# schema-server: 'local://'
use:
- invenio
#files:
Expand Down
3 changes: 3 additions & 0 deletions format.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
black oarepo_model_builder_drafts build-tests --target-version py310
autoflake --in-place --remove-all-unused-imports --recursive oarepo_model_builder_drafts build-tests
isort oarepo_model_builder_drafts build-tests --profile black
41 changes: 27 additions & 14 deletions oarepo_model_builder_drafts/builders/parent_jsonschema_builder.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,38 @@
from oarepo_model_builder.builders.json_base import JSONBaseBuilder
from oarepo_model_builder.builders.jsonschema import JSONSchemaBuilder
from oarepo_model_builder.stack import ModelBuilderStack
from oarepo_model_builder.utils.dict import dict_get


class JSONSchemaDraftsParentBuilder(JSONSchemaBuilder):
TYPE = "jsonschema_drafts_parent"
output_file_type = "jsonschema"
output_file_name = "drafts-parent-schema-file"
output_file_name = ["draft-parent-record-schema", "file"]
parent_module_root_name = "jsonschemas"

def begin(self, schema, settings):
super().begin(schema, settings)
target_json = {
def target_json(self):
return {
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": f"{schema.current_model.schema_server}{schema.current_model.drafts_parent_schema_name}",
# "$id": f"{schema.current_model.schema_server}{schema.current_model.drafts_parent_schema_name}",
"$id": "local://parent-v1.0.0.json",
"type": "object",
"properties": {
"id": {
"type": "string"
}
}
"properties": {"id": {"type": "keyword"}},
}
self.stack = ModelBuilderStack()
self.stack.push(None, target_json)

def build_node(self, node):
from oarepo_model_builder.datatypes import datatypes

json = self.target_json()
parsed_section = datatypes.get_datatype(
parent=None,
data=json,
key=None,
model=json,
schema=json,
)
parsed_section.prepare({})
skip = dict_get(
self.current_model.definition, ["json-schema-settings", "skip"], False
)
if skip:
return
generated = self.generate(node)
self.output.merge(generated)
3 changes: 3 additions & 0 deletions oarepo_model_builder_drafts/datatypes/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from .draft import DraftDataType

DRAFT_DATATYPES = [DraftDataType]
27 changes: 27 additions & 0 deletions oarepo_model_builder_drafts/datatypes/components/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from .draft import DraftComponent
from .draft_model import (
DraftDefaultsModelComponent,
DraftJSONSchemaModelComponent,
DraftMappingModelComponent,
DraftParentComponent,
DraftPIDModelComponent,
DraftRecordMetadataModelComponent,
DraftRecordModelComponent,
DraftResourceModelComponent,
DraftServiceModelComponent,
)
from .draft_tests import DraftModelTestComponent

DRAFT_COMPONENTS = [
DraftParentComponent,
DraftComponent,
DraftRecordModelComponent,
DraftRecordMetadataModelComponent,
DraftPIDModelComponent,
DraftDefaultsModelComponent,
DraftJSONSchemaModelComponent,
DraftModelTestComponent,
DraftMappingModelComponent,
DraftResourceModelComponent,
DraftServiceModelComponent,
]
118 changes: 118 additions & 0 deletions oarepo_model_builder_drafts/datatypes/components/draft.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
from oarepo_model_builder.datatypes import (
DataType,
DataTypeComponent,
Import,
ModelDataType,
Section,
)
from oarepo_model_builder.datatypes.components import (
PIDModelComponent,
RecordModelComponent,
ResourceModelComponent,
ServiceModelComponent,
)
from oarepo_model_builder.datatypes.components.model.utils import set_default
from oarepo_model_builder.datatypes.model import Link


class DraftComponent(DataTypeComponent):
eligible_datatypes = [ModelDataType]
affects = [
RecordModelComponent,
ServiceModelComponent,
ResourceModelComponent,
PIDModelComponent,
]

def process_links(self, datatype, section: Section, **kwargs):
# add files link item
if self.is_record_profile:
if "links_search" in section.config:
section.config.pop("links_search")
for link in section.config["links_item"]:
if link.name == "self":
section.config["links_item"].remove(link)
break
section.config["links_item"] += [
Link(
name="self",
link_class="ConditionalLink",
link_args=[
"cond=is_record",
'if_=RecordLink("{+api}{self.url_prefix}{id}")',
'else_=RecordLink("{+api}{self.url_prefix}{id}/draft")',
],
imports=[
Import("invenio_records_resources.services.ConditionalLink"),
Import("invenio_records_resources.services.RecordLink"),
Import(
"invenio_drafts_resources.services.records.config.is_record"
),
],
),
Link(
name="self_html",
link_class="ConditionalLink",
link_args=[
"cond=is_record",
'if_=RecordLink("{+ui}{self.url_prefix}{id}")',
'else_=RecordLink("{+ui}/uploads/{id}")',
],
imports=[
Import("invenio_records_resources.services.ConditionalLink"),
Import("invenio_records_resources.services.RecordLink"),
Import(
"invenio_drafts_resources.services.records.config.is_record"
),
],
),
Link(
name="latest",
link_class="RecordLink",
link_args=['"{+api}/{self.url_prefix}{id}/versions/latest"'],
imports=[Import("invenio_records_resources.services.RecordLink")],
),
Link(
name="latest_html",
link_class="RecordLink",
link_args=['"{+ui}/{self.url_prefix}{id}/latest"'],
imports=[Import("invenio_records_resources.services.RecordLink")],
),
Link(
name="draft",
link_class="RecordLink",
link_args=['"{+api}/{self.url_prefix}{id}/draft"'],
imports=[Import("invenio_records_resources.services.RecordLink")],
),
Link(
name="record",
link_class="RecordLink",
link_args=['"{+api}/{self.url_prefix}{id}"'],
imports=[Import("invenio_records_resources.services.RecordLink")],
),
Link(
name="publish",
link_class="RecordLink",
link_args=['"{+api}/{self.url_prefix}{id}/draft/actions/publish"'],
imports=[Import("invenio_records_resources.services.RecordLink")],
),
Link(
name="versions",
link_class="RecordLink",
link_args=['"{+api}/{self.url_prefix}{id}/versions"'],
imports=[Import("invenio_records_resources.services.RecordLink")],
),
]

def before_model_prepare(self, datatype, *, context, **kwargs):
self.is_draft_profile = context["profile"] == "draft"
self.is_record_profile = context["profile"] == "record"
if self.is_draft_profile:
parent_record_datatype: DataType = context["parent_record"]
datatype.parent_record = parent_record_datatype

properties = set_default(datatype, "properties", {})
for property_key, property_value in parent_record_datatype.definition[
"properties"
].items(): # this should
properties.setdefault(property_key, property_value)
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from .defaults import DraftDefaultsModelComponent
from .draft_parent import DraftParentComponent
from .jsonschema import DraftJSONSchemaModelComponent
from .mapping import DraftMappingModelComponent
from .pid import DraftPIDModelComponent
from .record import DraftRecordModelComponent
from .record_metadata import DraftRecordMetadataModelComponent
from .resource import DraftResourceModelComponent
from .service import DraftServiceModelComponent

__all__ = [
"DraftDefaultsModelComponent",
"DraftPIDModelComponent",
"DraftRecordModelComponent",
"DraftRecordMetadataModelComponent",
"DraftJSONSchemaModelComponent",
"DraftMappingModelComponent",
"DraftResourceModelComponent",
"DraftServiceModelComponent",
"DraftParentComponent",
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from oarepo_model_builder.datatypes.components import DefaultsModelComponent
from oarepo_model_builder.datatypes.components.model.utils import set_default

from oarepo_model_builder_drafts.datatypes import DraftDataType


class DraftDefaultsModelComponent(DefaultsModelComponent):
eligible_datatypes = [DraftDataType]
dependency_remap = DefaultsModelComponent

def before_model_prepare(self, datatype, *, context, **kwargs):
parent = context["parent_record"]
set_default(datatype, "model-name", parent.definition["model-name"])
module_container = set_default(datatype, "module", {})
module_container.setdefault(
"prefix", f"{parent.definition['module']['prefix']}Draft"
)

super().before_model_prepare(datatype, context=context, **kwargs)
Loading

0 comments on commit a7bfa2b

Please sign in to comment.