Skip to content

Commit

Permalink
first functional version
Browse files Browse the repository at this point in the history
  • Loading branch information
Ronald Krist committed Mar 9, 2023
1 parent 0cb826a commit 8f56c25
Show file tree
Hide file tree
Showing 12 changed files with 78 additions and 53 deletions.
Empty file.
25 changes: 25 additions & 0 deletions oarepo_model_builder_drafts/builders/parent_jsonschema_builder.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from oarepo_model_builder.builders.json_base import JSONBaseBuilder
from oarepo_model_builder.builders.jsonschema import JSONSchemaBuilder
from oarepo_model_builder.stack import ModelBuilderStack


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

def begin(self, schema, settings):
super().begin(schema, settings)
target_json = {
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": f"{schema.current_model.schema_server}{schema.current_model.drafts_parent_schema_name}",
"type": "object",
"properties": {
"id": {
"type": "string"
}
}
}
self.stack = ModelBuilderStack()
self.stack.push(None, target_json)
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@ class {{ current_model.drafts_parent_record_class|base_name }}({{ current_model.
model_cls = {{ current_model.drafts_parent_record_metadata_class|base_name }}

schema = ConstantField(
"$schema", "local://parent-v1.0.0.json"
"$schema", "{{ current_model.schema_server }}{{ current_model.drafts_parent_schema_name }}"
)
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from invenio_drafts_resources.records.api import DraftRecordIdProviderV2
from {{ current_model.drafts_parent_state_class|package_name }} import {{ current_model.drafts_parent_state_class|base_name }}

class {{ current_model.record_class|base_name }}:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
import os

import lazy_object_proxy

from oarepo_model_builder.model_preprocessors import ModelPreprocessor


Expand All @@ -6,12 +10,19 @@ class InvenioDraftsCommonModelPreprocessor(ModelPreprocessor):
TYPE = "invenio_drafts_common"

def transform(self, schema, settings):
base_model = schema.schema.model
cur_model = schema.current_model
model = schema.current_model

model.setdefault("pid-field-provider", "DraftRecordIdProviderV2")
model.setdefault("pid-field-imports", [{"import": "invenio_records_resources.records.systemfields.pid.PIDField"},
{"import": "invenio_records_resources.records.systemfields.pid.PIDFieldContext"},
{"import": "invenio_drafts_resources.records.api.DraftRecordIdProviderV2"}])

cur_model.setdefault("drafts-parent-state-class", f"{base_model.record_records_package}.models.ParentState")
cur_model.setdefault("drafts-parent-record-metadata-class",
f"{base_model.record_records_package}.models.{base_model.record_prefix}ParentRecordMetadata")
cur_model.setdefault("drafts-parent-record-class",
f"{base_model.record_records_package}.api.{base_model.record_prefix}ParentRecord")
model.setdefault("drafts-parent-state-class", lazy_object_proxy.Proxy(lambda: f"{model.record_records_package}.models.ParentState"))
model.setdefault("drafts-parent-record-metadata-class",
lazy_object_proxy.Proxy(lambda: f"{model.record_records_package}.models.{model.record_prefix}ParentRecordMetadata"))
model.setdefault("drafts-parent-record-class",
lazy_object_proxy.Proxy(lambda: f"{model.record_records_package}.api.{model.record_prefix}ParentRecord"))
model.setdefault("drafts-parent-schema-name", "parent-v1.0.0.json")
model.setdefault("drafts-parent-schema-file", lazy_object_proxy.Proxy(lambda: os.path.join(
model.package_path, "records", "jsonschemas", model.drafts_parent_schema_name
)))
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import os

import lazy_object_proxy

from oarepo_model_builder.model_preprocessors import ModelPreprocessor
from oarepo_model_builder.utils.camelcase import snake_case

Expand All @@ -8,29 +10,12 @@ class InvenioDraftsDraftModelPreprocessor(ModelPreprocessor):
TYPE = "invenio_drafts_draft"

def transform(self, schema, settings):
drafts_model = schema.current_model
base_model = schema.schema.model


record_prefix = base_model.record_prefix

drafts_model.setdefault("profile-package", base_model.profile_package)
drafts_model.setdefault("record-records-package", base_model.record_records_package)
drafts_model.setdefault("record-metadata-table-name", f"{base_model.record_metadata_table_name}_drafts")
### TODO ??? ask
#drafts_model.setdefault("mapping-file", os.path.join(
# base_model.package_path,
# "records",
# "mappings",
# "os-v2",
# snake_case(model.record_prefix),
# model.schema_name,
# ),
#)

drafts_model.setdefault("record-class", f"{base_model.record_records_package}.api.{record_prefix}Draft")
drafts_model.setdefault("record-metadata-class", f"{base_model.record_records_package}.models.{record_prefix}DraftMetadata")
drafts_model.setdefault("record-parent-class", "invenio_drafts_resources.records.api.Draft")
drafts_model.setdefault("record-metadata-parent-class", "invenio_drafts_resources.records.DraftMetadataBase")


model = schema.current_model
#alternatively record_prefix itself could be edited by adding "Draft" to it, it should work with editing the places where the unedited one is used for now (schema and mapping as far as i'm aware)
model.setdefault("pid-field-args", ["create=True","delete=False"])
model.setdefault("record-metadata-table-name", lazy_object_proxy.Proxy(lambda: f"{model.record_prefix.lower()}_metadata_draft"))
model.setdefault("index-name", lazy_object_proxy.Proxy(lambda: f"{snake_case(model.record_prefix)}-draft-{os.path.basename(model.mapping_file).replace('.json', '')}"))
model.setdefault("record-class", lazy_object_proxy.Proxy(lambda: f"{model.record_records_package}.api.{model.record_prefix}Draft"))
model.setdefault("record-metadata-class", lazy_object_proxy.Proxy(lambda: f"{model.record_records_package}.models.{model.record_prefix}DraftMetadata"))
model.setdefault("record-parent-class", "invenio_drafts_resources.records.api.Draft")
model.setdefault("record-metadata-parent-class", "invenio_drafts_resources.records.DraftMetadataBase")
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ class InvenioDraftsRecordModelPreprocessor(ModelPreprocessor):

def transform(self, schema, settings):
model = schema.current_model

model.setdefault("plugins", {"builder": {"disable": ["invenio_tests_resource", "invenio_tests_service"]}})
model.setdefault("drafts-parent-record-parent-class",
"invenio_drafts_resources.records.api.ParentRecord")
model.setdefault("record-resource-parent-class", "invenio_drafts_resources.resources.RecordResource")
Expand Down
10 changes: 0 additions & 10 deletions oarepo_model_builder_drafts/profiles/drafts.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,17 @@
import copy
from pathlib import Path
from typing import Union

from oarepo_model_builder.builder import ModelBuilder
from oarepo_model_builder.conflict_resolvers import AutomaticResolver
from oarepo_model_builder.entrypoints import create_builder_from_entrypoints
from oarepo_model_builder.schema import ModelSchema
from oarepo_model_builder.profiles import Profile

from oarepo_model_builder.utils.hyphen_munch import HyphenMunch
import munch


class DraftsProfile(Profile):

def build(
self,
model: ModelSchema,
base_model: ModelSchema,
output_directory: Union[str, Path],
builder: ModelBuilder,
):
del model.current_model["known-classes"]
model.schema.drafts = base_model.schema.model
model.model_field = "drafts"
builder.build(model, output_directory)
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
class InvenioDraftsTestResourcesBuilder(InvenioBaseClassPythonBuilder):
TYPE = "invenio_drafts_test_resources"
template = "drafts-test-resources"
MODULE = "tests.drafts.test_resources"
MODULE = "tests.test_resources"

def finish(self, **extra_kwargs):
module = self.MODULE
Expand Down
2 changes: 2 additions & 0 deletions oarepo_model_builder_drafts/validation/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ class DraftAddonClasses(ma.Schema):
drafts_parent_record_parent_class = fields.String(data_key="drafts-parent-record-parent-class", required=False)
drafts_parent_record_metadata_class = fields.String(data_key="drafts-parent-record-metadata-class", required=False)
drafts_parent_state_class = fields.String(data_key="drafts-parent-state-class", required=False)
drafts_parent_schema_name = fields.String(data_key="drafts-parent-schema-name", required=False)
drafts_parent_schema_file = fields.String(data_key="drafts-parent-schema-file", required=False)


class DraftsModelSchema(ma.Schema):
Expand Down
13 changes: 8 additions & 5 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@ install_requires =
#exclude = example_model

[options.entry_points]

oarepo_model_builder.builders.drafts:
0020-jsonschema_drafts_parent = oarepo_model_builder_drafts.builders.parent_jsonschema_builder:JSONSchemaDraftsParentBuilder
0110-invenio_record = oarepo_model_builder.invenio.invenio_record:InvenioRecordBuilder
0120-invenio_record_metadata = oarepo_model_builder.invenio.invenio_record_metadata:InvenioRecordMetadataBuilder

Expand All @@ -34,6 +36,7 @@ oarepo_model_builder.builders.drafts:
3200-invenio_drafts_test_resource = oarepo_model_builder_drafts.tests.invenio_drafts_test_resources:InvenioDraftsTestResourcesBuilder

oarepo_model_builder.builders.model:

0105-invenio_drafts_parent_record = oarepo_model_builder_drafts.invenio.invenio_drafts_parent_record:InvenioDraftsParentRecordBuilder
0100-invenio_drafts_parent_metadata = oarepo_model_builder_drafts.invenio.invenio_drafts_parent_metadata:InvenioDraftsParentMetadataBuilder
2800-invenio_drafts_record_metadata_extra_fields = oarepo_model_builder_drafts.invenio.invenio_drafts_record_metadata_extra_fields:InvenioDraftsRecordMetadataExtraFieldsBuilder
Expand All @@ -52,13 +55,13 @@ oarepo_model_builder.property_preprocessors.drafts =
300-enums = oarepo_model_builder.property_preprocessors.enum:EnumPreprocessor

oarepo_model_builder.model_preprocessors.model =
11-invenio_drafts_record = oarepo_model_builder_drafts.model_preprocessors.invenio_drafts_record:InvenioDraftsRecordModelPreprocessor
11-invenio_drafts_common = oarepo_model_builder_drafts.model_preprocessors.invenio_drafts_common:InvenioDraftsCommonModelPreprocessor
12-invenio_drafts_base_classes = oarepo_model_builder_drafts.model_preprocessors.invenio_drafts_base_classes:InvenioDraftsBaseClassesModelPreprocessor
05-invenio_drafts_record = oarepo_model_builder_drafts.model_preprocessors.invenio_drafts_record:InvenioDraftsRecordModelPreprocessor
05-invenio_drafts_common = oarepo_model_builder_drafts.model_preprocessors.invenio_drafts_common:InvenioDraftsCommonModelPreprocessor
15-invenio_drafts_base_classes = oarepo_model_builder_drafts.model_preprocessors.invenio_drafts_base_classes:InvenioDraftsBaseClassesModelPreprocessor

oarepo_model_builder.model_preprocessors.drafts =
11-invenio_drafts_draft = oarepo_model_builder_drafts.model_preprocessors.invenio_drafts_draft:InvenioDraftsDraftModelPreprocessor
11-invenio_drafts_common = oarepo_model_builder_drafts.model_preprocessors.invenio_drafts_common:InvenioDraftsCommonModelPreprocessor
05-invenio_drafts_draft = oarepo_model_builder_drafts.model_preprocessors.invenio_drafts_draft:InvenioDraftsDraftModelPreprocessor
05-invenio_drafts_common = oarepo_model_builder_drafts.model_preprocessors.invenio_drafts_common:InvenioDraftsCommonModelPreprocessor
10-default = oarepo_model_builder.model_preprocessors.default_values:DefaultValuesModelPreprocessor
12-invenio = oarepo_model_builder.model_preprocessors.invenio:InvenioModelPreprocessor
15-invenio_drafts_base_classes = oarepo_model_builder_drafts.model_preprocessors.invenio_drafts_base_classes:InvenioDraftsBaseClassesModelPreprocessor
Expand Down
12 changes: 11 additions & 1 deletion thesis.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,14 @@ model:
package: thesis
schema-server: 'local://'
use:
- invenio
- invenio
#files:
# use:
# - invenio_files
# properties:
# metadata:
# properties:
# title:
# type: fulltext
# package: thesis
# schema-server: 'local://'

0 comments on commit 8f56c25

Please sign in to comment.