Skip to content

Commit 31ea60b

Browse files
AlzpetaAlzbeta PokornaAlzbeta Pokornamesemus
authored
components and service build (#282)
* components and service build * tests * remove rdm model * test fix * service kwargs * Update run-tests.sh * Update run-tests.sh --------- Co-authored-by: Alzbeta Pokorna <[email protected]> Co-authored-by: Alzbeta Pokorna <[email protected]> Co-authored-by: Mirek Simek <[email protected]>
1 parent b0b4ff6 commit 31ea60b

File tree

10 files changed

+50
-27
lines changed

10 files changed

+50
-27
lines changed

oarepo_model_builder/datatypes/components/model/ext_resource.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,6 @@ def before_model_prepare(self, datatype, *, context, **kwargs):
3232
if not datatype.profile == "record":
3333
return
3434
ext = set_default(datatype, "ext-resource", {})
35-
35+
ext.setdefault("service-kwargs", {})
3636
ext.setdefault("generate", True)
3737
ext.setdefault("skip", False)

oarepo_model_builder/invenio/templates/ext.py.jinja2

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class {{ vars.ext|class_header }}:
1313

1414
def init_app(self, app):
1515
"""Flask application initialization."""
16+
self.app = app
1617
{% if vars.ext.base_classes %}
1718
super().init_app(app=app)
1819
{% endif %}

oarepo_model_builder/invenio/templates/ext_resource.py.jinja2

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,15 @@ class {{ vars.ext|class_header }}:
55
{% if not vars.service.skip %}
66
@cached_property
77
def {{ ext.ext_service_name }}(self):
8+
service_config = config.{{ vars.service_config.config_key }}
9+
service_kwargs = {{ ext.service_kwargs }}
10+
if hasattr(service_config, "build"):
11+
config_class = service_config.build(self.app)
12+
else:
13+
config_class = service_config()
14+
service_kwargs["config"] = config_class
815
return config.{{ vars.service.config_key }}(
9-
config=config.{{ vars.service_config.config_key }}(
10-
{% if vars.service_config.additional_args %}
11-
{{ vars.service_config.additional_args|generate_list }}
12-
{% endif %}),
16+
**service_kwargs,
1317
{% if vars.service.additional_args %}
1418
{{ vars.service.additional_args|generate_list }}
1519
{% endif %}

oarepo_model_builder/invenio/templates/service_config.py.jinja2

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
{% for c in vars.service_config.components %}
1111
{{ c|code_imports }}
1212
{% endfor %}
13+
from oarepo_runtime.services.components import process_service_configs
1314

1415
class {{ vars.service_config|class_header }}:
1516
"""{{ vars.record.class|base_name }} service config."""
@@ -41,7 +42,13 @@ class {{ vars.service_config|class_header }}:
4142
search_item_links_template = {{ vars.service_config.search_item_links_template_cls|base_name }}
4243
{% endif %}
4344

44-
components = [ {% for b in vars.service_config.base_classes %}*{{ b|base_name }}.components{% if not loop.last %}, {% endif %}{% endfor %}{% for c in vars.service_config.components %}, {{ c|extra_code }} {% endfor %}]
45+
@property
46+
def components(self):
47+
components_list = []
48+
components_list.extend(process_service_configs(type(self).mro()[2:]))
49+
additional_components = [{% for c in vars.service_config.components %}{{ c|extra_code }}{% if not loop.last %}, {% endif %}{% endfor %}]
50+
components_list.extend(additional_components)
51+
return components_list
4552

4653
model = "{{ vars.module.qualified }}"
4754

run-tests.sh

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ cd "$(dirname "$0")"
99
export BUILDER_VENV=.venv
1010
export TEST_VENV=.venv-tests
1111
export SERVER_VENV=.venv-server
12+
export PYTHON_VERSION=${PYTHON_VERSION:-python3}
1213

1314
OAREPO_VERSION=${OAREPO_VERSION:-12}
1415

@@ -19,12 +20,13 @@ initialize_server_venv() {
1920
rm -rf $SERVER_VENV
2021
fi
2122

22-
python3 -m venv $SERVER_VENV
23+
$PYTHON_VERSION -m venv $SERVER_VENV
2324
source $SERVER_VENV/bin/activate
2425

25-
$SERVER_VENV/bin/pip install -U setuptools pip wheel
26-
$SERVER_VENV/bin/pip install "oarepo[tests]==${OAREPO_VERSION}.*"
27-
$SERVER_VENV/bin/pip install -e complex-model
26+
$SERVER_VENV/bin/pip install -U setuptools pip wheel nrp-devtools
27+
$SERVER_VENV/bin/nrp-devtools proxy 120 &
28+
$SERVER_VENV/bin/pip install "oarepo[tests, rdm]==${OAREPO_VERSION}.*" --index-url "http://127.0.0.1:4549/simple" --extra-index-url https://pypi.org/simple
29+
$SERVER_VENV/bin/pip install -e complex-model --index-url "http://127.0.0.1:4549/simple" --extra-index-url https://pypi.org/simple
2830
}
2931

3032
initialize_builder_venv() {
@@ -33,7 +35,7 @@ initialize_builder_venv() {
3335
rm -rf $BUILDER_VENV
3436
fi
3537

36-
python3 -m venv $BUILDER_VENV
38+
$PYTHON_VERSION -m venv $BUILDER_VENV
3739
. $BUILDER_VENV/bin/activate
3840
$BUILDER_VENV/bin/pip install -U setuptools pip wheel
3941
$BUILDER_VENV/bin/pip install -e '.[tests]'
@@ -45,7 +47,7 @@ initialize_client_test_venv() {
4547
rm -rf $TEST_VENV
4648
fi
4749

48-
python3 -m venv $TEST_VENV
50+
$PYTHON_VERSION -m venv $TEST_VENV
4951

5052
$TEST_VENV/bin/pip install -U setuptools pip wheel
5153
$TEST_VENV/bin/pip install requests PyYAML pytest
@@ -159,4 +161,4 @@ cat complex-model/data/sample_data.yaml
159161
$TEST_VENV/bin/pytest tests-model
160162

161163

162-
echo "All tests succeeded"
164+
echo "All tests succeeded"

setup.cfg

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[metadata]
22
name = oarepo-model-builder
3-
version = 4.0.96
3+
version = 4.0.97
44
description = A utility library that generates OARepo required data model files from a JSON specification file
55
authors = Miroslav Bauer <[email protected]>, Miroslav Simek <[email protected]>
66
readme = README.md
@@ -9,7 +9,7 @@ long_description_content_type = text/markdown
99

1010

1111
[options]
12-
python = >=3.9
12+
python = >=3.12
1313
install_requires =
1414
ConfigUpdater>=3.1.1,<4.0.0
1515
Faker>11.3.0

tests/test_datatype_prepare.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def test_prepare_datatype():
6666
"suffix-snake": "test",
6767
},
6868
"sample": {"file": "data/sample_data.yaml"},
69-
"ext-resource": {"generate": True, "skip": False},
69+
"ext-resource": {"generate": True, 'service-kwargs': {}, "skip": False},
7070
"search-options": {
7171
"generate": True,
7272
"module": "my.test.services.records.search",

tests/test_include_components.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,7 @@ def test_include_invenio():
4747
data = builder.filesystem.open(
4848
os.path.join("test", "services", "records", "config.py")
4949
).read()
50-
data = str(data)
51-
assert (
52-
"components=[*PermissionsPresetsConfigMixin.components,*InvenioRecordServiceConfig.components,DoiComponent,OaiSectionComponent]"
53-
in re.sub(r"\s", "", data)
54-
)
50+
data = re.sub(r"\s", "", str(data))
51+
additional_components = "additional_components=[DoiComponent,OaiSectionComponent]" # Remove whitespace from expected substring
52+
53+
assert additional_components in data

tests/test_model_saver.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ def test_model_saver():
4040
}
4141
},
4242
)
43+
print(data[0]["model"])
4344
assert data[0]["model"] == {
4445
"type": "model",
4546
"searchable": True,
@@ -60,7 +61,7 @@ def test_model_saver():
6061
},
6162
"sample": {"file": "data/sample_data.yaml"},
6263
"model-name": "Test",
63-
"ext-resource": {"generate": True, "skip": False},
64+
"ext-resource": {"generate": True, 'service-kwargs': {} , "skip": False},
6465
"search-options": {
6566
"generate": True,
6667
"module": "test.services.records.search",
@@ -433,7 +434,7 @@ def test_model_saver_invenio():
433434
},
434435
"sample": {"file": "data/sample_data.yaml"},
435436
"model-name": "Test",
436-
"ext-resource": {"generate": True, "skip": False},
437+
"ext-resource": {"generate": True, 'service-kwargs': {}, "skip": False},
437438
"search-options": {
438439
"generate": True,
439440
"module": "test.services.records.search",

tests/test_simple_builders.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ def __init__(self, app=None):
193193
194194
def init_app(self, app):
195195
"""Flask application initialization."""
196+
self.app = app
196197
197198
self.init_config(app)
198199
if not self.is_inherited():
@@ -392,6 +393,7 @@ def test_service_config():
392393
from test.services.records.results import TestRecordList
393394
from invenio_records_resources.services import LinksTemplate
394395
396+
from oarepo_runtime.services.components import process_service_configs
395397
396398
class TestServiceConfig(PermissionsPresetsConfigMixin, InvenioRecordServiceConfig):
397399
"""TestRecord service config."""
@@ -418,12 +420,19 @@ class TestServiceConfig(PermissionsPresetsConfigMixin, InvenioRecordServiceConfi
418420
419421
420422
service_id = "test"
421-
422-
423+
424+
423425
search_item_links_template = LinksTemplate
424-
425426
426-
components = [ *PermissionsPresetsConfigMixin.components, *InvenioRecordServiceConfig.components]
427+
428+
@property
429+
def components(self):
430+
components_list = []
431+
components_list.extend(process_service_configs(type(self).mro()[2:]))
432+
additional_components = []
433+
components_list.extend(additional_components)
434+
return components_list
435+
427436
428437
model = "test"
429438

0 commit comments

Comments
 (0)