invenio-app-ils 4.6.0__py2.py3-none-any.whl → 5.0.0__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. invenio_app_ils/__init__.py +1 -1
  2. invenio_app_ils/assets/semantic-ui/less/theme.config +103 -0
  3. invenio_app_ils/circulation/api.py +9 -5
  4. invenio_app_ils/circulation/config.py +1 -0
  5. invenio_app_ils/circulation/loaders/schemas/json/loan_checkout.py +1 -1
  6. invenio_app_ils/circulation/loaders/schemas/json/loan_request.py +2 -2
  7. invenio_app_ils/circulation/notifications/api.py +9 -1
  8. invenio_app_ils/circulation/notifications/messages.py +2 -1
  9. invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/update_dates.html +19 -0
  10. invenio_app_ils/cli.py +92 -64
  11. invenio_app_ils/config.py +10 -2
  12. invenio_app_ils/documents/loaders/jsonschemas/document.py +1 -1
  13. invenio_app_ils/eitems/loaders/jsonschemas/eitems.py +2 -2
  14. invenio_app_ils/patrons/anonymization.py +0 -4
  15. invenio_app_ils/series/loaders/jsonschemas/series.py +1 -1
  16. invenio_app_ils/webpack.py +27 -0
  17. {invenio_app_ils-4.6.0.dist-info → invenio_app_ils-5.0.0.dist-info}/METADATA +52 -42
  18. {invenio_app_ils-4.6.0.dist-info → invenio_app_ils-5.0.0.dist-info}/RECORD +24 -112
  19. {invenio_app_ils-4.6.0.dist-info → invenio_app_ils-5.0.0.dist-info}/entry_points.txt +3 -0
  20. {invenio_app_ils-4.6.0.dist-info → invenio_app_ils-5.0.0.dist-info}/top_level.txt +0 -1
  21. invenio_app_ils/notifications/admin.py +0 -57
  22. tests/__init__.py +0 -8
  23. tests/api/__init__.py +0 -8
  24. tests/api/acquisition/__init__.py +0 -8
  25. tests/api/acquisition/test_acq_orders_crud.py +0 -99
  26. tests/api/acquisition/test_acq_orders_permissions.py +0 -104
  27. tests/api/acquisition/test_acq_providers_permissions.py +0 -83
  28. tests/api/circulation/__init__.py +0 -8
  29. tests/api/circulation/test_expired_loans.py +0 -88
  30. tests/api/circulation/test_loan_bulk_extend.py +0 -169
  31. tests/api/circulation/test_loan_checkout.py +0 -422
  32. tests/api/circulation/test_loan_default_durations.py +0 -43
  33. tests/api/circulation/test_loan_document_resolver.py +0 -18
  34. tests/api/circulation/test_loan_extend.py +0 -122
  35. tests/api/circulation/test_loan_item_permissions.py +0 -135
  36. tests/api/circulation/test_loan_item_resolver.py +0 -26
  37. tests/api/circulation/test_loan_list_permissions.py +0 -98
  38. tests/api/circulation/test_loan_patron_resolver.py +0 -38
  39. tests/api/circulation/test_loan_request.py +0 -338
  40. tests/api/circulation/test_loan_update.py +0 -150
  41. tests/api/circulation/test_notifications.py +0 -221
  42. tests/api/conftest.py +0 -227
  43. tests/api/document_requests/__init__.py +0 -8
  44. tests/api/document_requests/test_document_requests.py +0 -131
  45. tests/api/document_requests/test_document_requests_permissions.py +0 -159
  46. tests/api/document_requests/test_notifications_filter.py +0 -35
  47. tests/api/ill/__init__.py +0 -8
  48. tests/api/ill/test_ill_brw_crud.py +0 -74
  49. tests/api/ill/test_ill_brw_reqs_patron_loan_create_action.py +0 -198
  50. tests/api/ill/test_ill_brw_reqs_patron_loan_extension_actions.py +0 -280
  51. tests/api/ill/test_ill_brw_reqs_permissions.py +0 -163
  52. tests/api/ill/test_ill_providers_permissions.py +0 -82
  53. tests/api/ils/__init__.py +0 -8
  54. tests/api/ils/documents/__init__.py +0 -8
  55. tests/api/ils/documents/test_document_crud.py +0 -57
  56. tests/api/ils/documents/test_document_permissions.py +0 -100
  57. tests/api/ils/documents/test_document_resolvers.py +0 -35
  58. tests/api/ils/eitems/__init__.py +0 -8
  59. tests/api/ils/eitems/test_eitems_crud.py +0 -42
  60. tests/api/ils/eitems/test_eitems_permissions.py +0 -85
  61. tests/api/ils/eitems/test_files.py +0 -162
  62. tests/api/ils/items/__init__.py +0 -8
  63. tests/api/ils/items/test_apis.py +0 -43
  64. tests/api/ils/items/test_items_crud.py +0 -99
  65. tests/api/ils/items/test_items_permissions.py +0 -107
  66. tests/api/ils/records_relations/__init__.py +0 -8
  67. tests/api/ils/records_relations/helpers.py +0 -115
  68. tests/api/ils/records_relations/test_records_relations_parentchild.py +0 -560
  69. tests/api/ils/records_relations/test_records_relations_sequence.py +0 -294
  70. tests/api/ils/records_relations/test_records_relations_siblings.py +0 -751
  71. tests/api/ils/series/__init__.py +0 -8
  72. tests/api/ils/series/test_series_permissions.py +0 -95
  73. tests/api/ils/test_anonymization.py +0 -181
  74. tests/api/ils/test_apis.py +0 -76
  75. tests/api/ils/test_closures.py +0 -353
  76. tests/api/ils/test_errors.py +0 -125
  77. tests/api/ils/test_facets.py +0 -88
  78. tests/api/ils/test_internal_locations.py +0 -96
  79. tests/api/ils/test_loaders.py +0 -51
  80. tests/api/ils/test_metadata_extensions.py +0 -206
  81. tests/api/ils/test_notifications.py +0 -173
  82. tests/api/ils/test_notifications_mails.py +0 -37
  83. tests/api/ils/test_notifications_permissions.py +0 -55
  84. tests/api/ils/test_patrons.py +0 -102
  85. tests/api/ils/test_record_delete.py +0 -42
  86. tests/api/ils/test_record_permissions.py +0 -132
  87. tests/api/ils/test_resolvers.py +0 -205
  88. tests/api/ils/test_stats.py +0 -142
  89. tests/api/ils/test_tasks.py +0 -209
  90. tests/api/ils/test_vocabularies.py +0 -35
  91. tests/conftest.py +0 -221
  92. tests/data/acq_orders.json +0 -110
  93. tests/data/acq_providers.json +0 -12
  94. tests/data/document_requests.json +0 -77
  95. tests/data/documents.json +0 -238
  96. tests/data/eitems.json +0 -71
  97. tests/data/ill_borrowing_requests.json +0 -77
  98. tests/data/ill_providers.json +0 -12
  99. tests/data/internal_locations.json +0 -22
  100. tests/data/items.json +0 -304
  101. tests/data/loans.json +0 -133
  102. tests/data/loans_most_loaned.json +0 -128
  103. tests/data/locations.json +0 -26
  104. tests/data/series.json +0 -33
  105. tests/helpers.py +0 -107
  106. tests/templates/notifications/title_body.html +0 -8
  107. tests/templates/notifications/title_body_html.html +0 -13
  108. tests/templates/notifications/title_body_html_ctx.html +0 -13
  109. tests/templates/notifications/title_only.html +0 -3
  110. tests/test_post_logout_redirect.py +0 -23
  111. tests/test_version.py +0 -17
  112. /tests/templates/notifications/blank.html → /invenio_app_ils/assets/semantic-ui/templates/.gitkeep +0 -0
  113. {invenio_app_ils-4.6.0.dist-info → invenio_app_ils-5.0.0.dist-info}/WHEEL +0 -0
  114. {invenio_app_ils-4.6.0.dist-info → invenio_app_ils-5.0.0.dist-info}/licenses/AUTHORS.rst +0 -0
  115. {invenio_app_ils-4.6.0.dist-info → invenio_app_ils-5.0.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,35 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- #
3
- # Copyright (C) 2020 CERN.
4
- #
5
- # invenio-app-ils is free software; you can redistribute it and/or modify it
6
- # under the terms of the MIT License; see LICENSE file for more details.
7
-
8
- """Test vocabularies endpoint."""
9
- import json
10
-
11
- from flask import url_for
12
-
13
- from tests.helpers import user_login
14
-
15
- LIST_ENDPOINT = "invenio_records_rest.vocid_list"
16
-
17
-
18
- def test_vocabularies_permissions(client, testdata, json_headers, users):
19
- """Test vocabularies endpoints permissions."""
20
- tests = [
21
- ("admin", [200]),
22
- ("librarian", [200]),
23
- ("patron1", [200]),
24
- ("anonymous", [200]),
25
- ]
26
-
27
- def _test_list(expected_status):
28
- """Test get list."""
29
- url = url_for(LIST_ENDPOINT)
30
- res = client.get(url, headers=json_headers)
31
- assert res.status_code in expected_status
32
-
33
- for username, codes in tests:
34
- user_login(client, username, users)
35
- _test_list(codes)
tests/conftest.py DELETED
@@ -1,221 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- #
3
- # Copyright (C) 2020 CERN.
4
- #
5
- # invenio-app-ils is free software; you can redistribute it and/or modify it
6
- # under the terms of the MIT License; see LICENSE file for more details.
7
-
8
- """Common pytest fixtures and plugins."""
9
-
10
- import os
11
-
12
- import jinja2
13
- import pytest
14
- from flask import Blueprint
15
- from flask_webpackext.manifest import (
16
- JinjaManifest,
17
- JinjaManifestEntry,
18
- JinjaManifestLoader,
19
- )
20
- from invenio_access.models import ActionRoles
21
- from invenio_access.permissions import superuser_access
22
- from invenio_accounts.models import Role
23
- from invenio_app.factory import create_app as _create_app
24
- from invenio_userprofiles import UserProfile
25
-
26
- from invenio_app_ils.permissions import backoffice_access_action
27
-
28
-
29
- #
30
- # Mock the webpack manifest to avoid having to compile the full assets.
31
- #
32
- class MockJinjaManifest(JinjaManifest):
33
- """Mock manifest."""
34
-
35
- def __getitem__(self, key):
36
- """Get a manifest entry."""
37
- return JinjaManifestEntry(key, [key])
38
-
39
- def __getattr__(self, name):
40
- """Get a manifest entry."""
41
- return JinjaManifestEntry(name, [name])
42
-
43
-
44
- class MockManifestLoader(JinjaManifestLoader):
45
- """Manifest loader creating a mocked manifest."""
46
-
47
- def load(self, filepath):
48
- """Load the manifest."""
49
- return MockJinjaManifest()
50
-
51
-
52
- @pytest.fixture(scope="module")
53
- def app_config(app_config):
54
- """Create test app."""
55
- app_config["WEBPACKEXT_MANIFEST_LOADER"] = MockManifestLoader
56
- return app_config
57
-
58
-
59
- @pytest.fixture()
60
- def users(app, db):
61
- """Create admin, librarians and patrons."""
62
- # with Postgresql, when dropping the User table, the sequence is not
63
- # automatically reset to 1, causing issues with the tests demo data.
64
- db.session.execute("ALTER SEQUENCE IF EXISTS accounts_user_id_seq RESTART")
65
- db.session.commit()
66
-
67
- with db.session.begin_nested():
68
- datastore = app.extensions["security"].datastore
69
- # create users
70
- patron1 = datastore.create_user(
71
- email="patron1@test.com", password="123456", active=True
72
- )
73
-
74
- patron2 = datastore.create_user(
75
- email="patron2@test.com", password="123456", active=True
76
- )
77
- patron3 = datastore.create_user(
78
- email="patron3@test.com", password="123456", active=True
79
- )
80
- librarian = datastore.create_user(
81
- email="librarian@test.com", password="123456", active=True
82
- )
83
- librarian2 = datastore.create_user(
84
- email="librarian2@test.com", password="123456", active=True
85
- )
86
- admin = datastore.create_user(
87
- email="admin@test.com", password="123456", active=True
88
- )
89
- # Give role to admin
90
- admin_role = Role(name="admin")
91
- db.session.add(ActionRoles(action=superuser_access.value, role=admin_role))
92
- datastore.add_role_to_user(admin, admin_role)
93
- # Give role to librarian
94
- librarian_role = Role(name="librarian")
95
- db.session.add(
96
- ActionRoles(action=backoffice_access_action.value, role=librarian_role)
97
- )
98
- datastore.add_role_to_user(librarian, librarian_role)
99
- # Give role to librarian2
100
- db.session.add(
101
- ActionRoles(action=backoffice_access_action.value, role=librarian_role)
102
- )
103
- datastore.add_role_to_user(librarian2, librarian_role)
104
- db.session.commit()
105
-
106
- for patron, name in [
107
- (admin, "Admin User"),
108
- (librarian, "Librarian One"),
109
- (librarian2, "Librarian Two"),
110
- (patron1, "Patron One"),
111
- (patron2, "Patron Two"),
112
- (patron3, "Patron Three"),
113
- ]:
114
- profile = UserProfile(
115
- **dict(
116
- user_id=patron.id,
117
- _displayname="id_" + str(patron.id),
118
- full_name=name,
119
- )
120
- )
121
- db.session.add(profile)
122
- db.session.commit()
123
-
124
- return {
125
- "admin": admin,
126
- "librarian": librarian,
127
- "librarian2": librarian2,
128
- "patron1": patron1,
129
- "patron2": patron2,
130
- "patron3": patron3,
131
- }
132
-
133
-
134
- @pytest.fixture(scope="module")
135
- def app_with_notifs(app):
136
- """App with notifications test templates."""
137
- app.register_blueprint(
138
- Blueprint("invenio_app_ils_tests", __name__, template_folder="templates")
139
- )
140
- # add extra test templates to the search app blueprint, to fake the
141
- # existence of `invenio-theme` base templates.
142
- test_templates_path = os.path.join(os.path.dirname(__file__), "templates")
143
- enhanced_jinja_loader = jinja2.ChoiceLoader(
144
- [
145
- app.jinja_loader,
146
- jinja2.FileSystemLoader(test_templates_path),
147
- ]
148
- )
149
- # override default app jinja_loader to add the new path
150
- app.jinja_loader = enhanced_jinja_loader
151
- yield app
152
-
153
-
154
- @pytest.fixture(scope="module")
155
- def create_app():
156
- """Create test app."""
157
- return _create_app
158
-
159
-
160
- @pytest.fixture(scope="module")
161
- def base_app(create_app, app_config, request, default_handler):
162
- """Base application fixture (without database, search and cache).
163
-
164
- Scope: module.
165
-
166
- This fixture is responsible for creating the Invenio application. It
167
- depends on an application factory fixture that must be defined by the user.
168
-
169
- .. code-block:: python
170
-
171
- # confest.py
172
- import pytest
173
-
174
- @pytest.fixture(scope='module)
175
- def create_app():
176
- from invenio_app.factory import create_api
177
- return create_api
178
-
179
- It is possible to overide the application factory for a specific test
180
- module, either by defining a fixture like above example, or simply setting
181
- the ``create_app`` property on the module:
182
-
183
- .. code-block:: python
184
-
185
- # test_something.py
186
-
187
- from invenio_app.factory import create_api
188
- create_app = create_api
189
-
190
- def test_acase(base_app):
191
- # ...
192
- """
193
- # Use create_app from the module if defined, otherwise use default
194
- # create_app fixture.
195
- create_app = getattr(request.module, "create_app", create_app)
196
- app_ = create_app(**app_config)
197
-
198
- def delete_user_from_g(exception):
199
- """Delete user from `flask.g` when the request is tearing down.
200
-
201
- Flask-login==0.6.2 changed the way the user is saved i.e uses `flask.g`.
202
- Flask.g is pointing to the application context which is initialized per
203
- request. That said, `pytest-flask` is pushing an application context on each
204
- test initialization that causes problems as subsequent requests during a test
205
- are detecting the active application request and not popping it when the
206
- sub-request is tearing down. That causes the logged in user to remain cached
207
- for the whole duration of the test. To fix this, we add an explicit teardown
208
- handler that will pop out the logged in user in each request and it will force
209
- the user to be loaded each time.
210
- """
211
- from flask import g
212
-
213
- if "_login_user" in g:
214
- del g._login_user
215
-
216
- app_.teardown_request(delete_user_from_g)
217
-
218
- # See documentation for default_handler
219
- if default_handler:
220
- app_.logger.addHandler(default_handler)
221
- yield app_
@@ -1,110 +0,0 @@
1
- [
2
- {
3
- "order_date": "2020-01-27",
4
- "order_lines": [
5
- {
6
- "copies_ordered": 5,
7
- "document_pid": "docid-1",
8
- "medium": "hardcover",
9
- "recipient": "library"
10
- }
11
- ],
12
- "pid": "acqoid-1",
13
- "status": "PENDING",
14
- "provider_pid": "acq-provid-1"
15
- },
16
- {
17
- "order_date": "2020-01-25",
18
- "order_lines": [
19
- {
20
- "copies_ordered": 2,
21
- "document_pid": "docid-2",
22
- "medium": "hardcover",
23
- "recipient": "library"
24
- }
25
- ],
26
- "pid": "acqoid-2",
27
- "status": "ORDERED",
28
- "provider_pid": "acq-provid-1"
29
- },
30
- {
31
- "order_date": "2020-01-15",
32
- "order_lines": [
33
- {
34
- "copies_ordered": 1,
35
- "document_pid": "docid-3",
36
- "medium": "hardcover",
37
- "recipient": "library"
38
- }
39
- ],
40
- "pid": "acqoid-3",
41
- "status": "ORDERED",
42
- "provider_pid": "acq-provid-2"
43
- },
44
- {
45
- "order_date": "2020-01-29",
46
- "order_lines": [
47
- {
48
- "copies_ordered": 10,
49
- "document_pid": "docid-4",
50
- "medium": "hardcover",
51
- "recipient": "library"
52
- }
53
- ],
54
- "pid": "acqoid-4",
55
- "status": "RECEIVED",
56
- "provider_pid": "acq-provid-2"
57
- },
58
- {
59
- "order_date": "2020-01-28",
60
- "order_lines": [
61
- {
62
- "copies_ordered": 7,
63
- "document_pid": "docid-4",
64
- "medium": "hardcover",
65
- "patron_pid": "2",
66
- "recipient": "library"
67
- }
68
- ],
69
- "pid": "acqoid-5",
70
- "status": "CANCELLED",
71
- "cancel_reason": "A reason",
72
- "provider_pid": "acq-provid-2"
73
- },
74
- {
75
- "order_date": "2020-01-29",
76
- "order_lines": [
77
- {
78
- "copies_ordered": 1,
79
- "document_pid": "docid-1",
80
- "medium": "hardcover",
81
- "recipient": "patron",
82
- "patron_pid": "1"
83
- }
84
- ],
85
- "pid": "acqoid-6",
86
- "status": "ORDERED",
87
- "provider_pid": "acq-provid-2"
88
- },
89
- {
90
- "order_date": "2020-01-29",
91
- "order_lines": [
92
- {
93
- "copies_ordered": 1,
94
- "document_pid": "docid-1",
95
- "medium": "hardcover",
96
- "recipient": "patron",
97
- "patron_pid": "4"
98
- },
99
- {
100
- "copies_ordered": 1,
101
- "document_pid": "docid-1",
102
- "medium": "hardcover",
103
- "recipient": "patron"
104
- }
105
- ],
106
- "pid": "acqoid-7",
107
- "status": "RECEIVED",
108
- "provider_pid": "acq-provid-2"
109
- }
110
- ]
@@ -1,12 +0,0 @@
1
- [
2
- {
3
- "name": "Store 1",
4
- "pid": "acq-provid-1",
5
- "type": "VENDOR"
6
- },
7
- {
8
- "name": "Store 2",
9
- "pid": "acq-provid-2",
10
- "type": "VENDOR"
11
- }
12
- ]
@@ -1,77 +0,0 @@
1
- [
2
- {
3
- "pid": "dreq-1",
4
- "state": "PENDING",
5
- "patron_pid": "1",
6
- "medium": "PAPER",
7
- "title": "Test title 1",
8
- "request_type": "LOAN",
9
- "document_pid": "docid-1",
10
- "physical_item_provider": {
11
- "pid": "acqoid-1",
12
- "pid_type": "acqoid"
13
- }
14
- },
15
- {
16
- "pid": "dreq-2",
17
- "state": "DECLINED",
18
- "patron_pid": "2",
19
- "request_type": "BUY",
20
- "medium": "PAPER",
21
- "title": "Test title 2",
22
- "decline_reason": "Test."
23
- },
24
- {
25
- "pid": "dreq-3",
26
- "state": "ACCEPTED",
27
- "patron_pid": "3",
28
- "request_type": "LOAN",
29
- "medium": "PAPER",
30
- "document_pid": "docid-1",
31
- "title": "Test title 3",
32
- "physical_item_provider": {
33
- "pid": "acqoid-1",
34
- "pid_type": "acqoid"
35
- }
36
- },
37
-
38
- {
39
- "pid": "dreq-4",
40
- "state": "ACCEPTED",
41
- "patron_pid": "4",
42
- "request_type": "BUY",
43
- "medium": "PAPER",
44
- "document_pid": "docid-2",
45
- "title": "Test title 4",
46
- "physical_item_provider": {
47
- "pid": "acqoid-1",
48
- "pid_type": "acqoid"
49
- }
50
- },
51
- {
52
- "pid": "dreq-5",
53
- "state": "PENDING",
54
- "patron_pid": "1",
55
- "medium": "PAPER",
56
- "title": "Test title 1",
57
- "request_type": "LOAN",
58
- "document_pid": "docid-1",
59
- "physical_item_provider": {
60
- "pid": "acqoid-1",
61
- "pid_type": "acqoid"
62
- }
63
- },
64
- {
65
- "pid": "dreq-6",
66
- "state": "PENDING",
67
- "patron_pid": "1",
68
- "medium": "PAPER",
69
- "title": "Test title 1",
70
- "request_type": "LOAN",
71
- "document_pid": "docid-1",
72
- "physical_item_provider": {
73
- "pid": "acqoid-1",
74
- "pid_type": "acqoid"
75
- }
76
- }
77
- ]
tests/data/documents.json DELETED
@@ -1,238 +0,0 @@
1
- [
2
- {
3
- "$schema": "https://127.0.0.1:5000/schemas/documents/document-v2.0.0.json",
4
- "pid": "docid-1",
5
- "created_by": {"type": "script", "value": "demo"},
6
- "title": "The Gulf: The Making of An American Sea",
7
- "authors": [{ "full_name": "Jack E. Davis" }],
8
- "abstract": "This is an abstract",
9
- "languages": ["ENG"],
10
- "edition": "1",
11
- "keywords": [
12
- {
13
- "source": "X",
14
- "value": "Patata"
15
- }],
16
- "document_type": "BOOK",
17
- "publication_year": "1950"
18
- },
19
- {
20
- "$schema": "https://127.0.0.1:5000/schemas/documents/document-v2.0.0.json",
21
- "pid": "docid-2",
22
- "created_by": {"type": "script", "value": "demo"},
23
- "title": "Prairie Fires: The American Dreams of Laura Ingalls Wilder",
24
- "authors": [{ "full_name": "Caroline Fraser" }],
25
- "abstract": "This is an abstract",
26
- "languages": ["ITA"],
27
- "keywords": [
28
- {
29
- "source": "X",
30
- "value": "Patata"
31
- }],
32
- "document_type": "BOOK",
33
- "publication_year": "1950"
34
- },
35
- {
36
- "$schema": "https://127.0.0.1:5000/schemas/documents/document-v2.0.0.json",
37
- "pid": "docid-3",
38
- "created_by": {"type": "script", "value": "demo"},
39
- "title": "Half-light: Collected Poems 1965-2016",
40
- "authors": [{ "full_name": "Frank Bidart" }],
41
- "abstract": "This is an abstract",
42
- "edition": "3",
43
- "keywords": [
44
- {
45
- "source": "X",
46
- "value": "Patata"
47
- }],
48
- "document_type": "BOOK",
49
- "publication_year": "1950"
50
- },
51
- {
52
- "$schema": "https://127.0.0.1:5000/schemas/documents/document-v2.0.0.json",
53
- "pid": "docid-4",
54
- "created_by": {"type": "script", "value": "demo"},
55
- "title": "Locking Up Our Own: Crime and Punishment in Black America",
56
- "authors": [{ "full_name": "James Forman Jr." }],
57
- "abstract": "This is an abstract",
58
- "keywords": [
59
- {
60
- "source": "X",
61
- "value": "Patata"
62
- }],
63
- "document_type": "BOOK",
64
- "publication_year": "1950"
65
- },
66
- {
67
- "$schema": "https://127.0.0.1:5000/schemas/documents/document-v2.0.0.json",
68
- "pid": "docid-5",
69
- "created_by": {"type": "script", "value": "demo"},
70
- "title": "Less: A Novel",
71
- "authors": [{ "full_name": "Andrew Sean Greer" }],
72
- "abstract": "This is an abstract",
73
- "document_type": "STANDARD",
74
- "publication_year": "1950"
75
- },
76
- {
77
- "$schema": "https://127.0.0.1:5000/schemas/documents/document-v2.0.0.json",
78
- "pid": "docid-6",
79
- "created_by": {"type": "script", "value": "demo"},
80
- "title": "Less: A Novel",
81
- "languages": ["POL"],
82
- "authors": [{ "full_name": "Andrew Sean Greer" }],
83
- "abstract": "This is an abstract",
84
- "document_type": "BOOK",
85
- "publication_year": "1950"
86
- },
87
- {
88
- "$schema": "https://127.0.0.1:5000/schemas/documents/document-v2.0.0.json",
89
- "pid": "docid-7",
90
- "created_by": {"type": "script", "value": "demo"},
91
- "title": "Less: A Novel",
92
- "authors": [{ "full_name": "Andrew Sean Greer" }],
93
- "abstract": "This is an abstract",
94
- "document_type": "SERIAL_ISSUE",
95
- "publication_year": "1950"
96
- },
97
- {
98
- "$schema": "https://127.0.0.1:5000/schemas/documents/document-v2.0.0.json",
99
- "pid": "docid-8",
100
- "created_by": {"type": "script", "value": "demo"},
101
- "title": "Less: A Novel",
102
- "authors": [{ "full_name": "Andrew Sean Greer" }],
103
- "abstract": "This is an abstract",
104
- "edition": "2",
105
- "document_type": "THESIS",
106
- "publication_year": "1950"
107
- },
108
- {
109
- "$schema": "https://127.0.0.1:5000/schemas/documents/document-v2.0.0.json",
110
- "pid": "docid-9",
111
- "created_by": {"type": "script", "value": "demo"},
112
- "title": "The early years, 1879-1902",
113
- "authors": [
114
- { "full_name": "Einstein, Albert" },
115
- { "full_name": "Stachel, John J et al." }
116
- ],
117
- "abstract": "This is a document volume v.1 part of a MULTIPART MONOGRAPH",
118
- "document_type": "BOOK",
119
- "publication_year": "1950"
120
- },
121
- {
122
- "$schema": "https://127.0.0.1:5000/schemas/documents/document-v2.0.0.json",
123
- "pid": "docid-10",
124
- "created_by": {"type": "script", "value": "demo"},
125
- "title": "The Swiss years : writings, 1900-1909",
126
- "authors": [
127
- { "full_name": "Einstein, Albert" },
128
- { "full_name": "Stachel, John J et al." }
129
- ],
130
- "abstract": "This is a document volume v.2 part of a MULTIPART MONOGRAPH",
131
- "document_type": "BOOK",
132
- "publication_year": "1950"
133
- },
134
- {
135
- "$schema": "https://127.0.0.1:5000/schemas/documents/document-v2.0.0.json",
136
- "pid": "docid-11",
137
- "created_by": {"type": "script", "value": "demo"},
138
- "title": "The Swiss years : writings, 1909-1911",
139
- "authors": [
140
- { "full_name": "Einstein, Albert" },
141
- { "full_name": "Stachel, John J et al." }
142
- ],
143
- "abstract": "This is a document volume v.3 part of a MULTIPART MONOGRAPH",
144
- "document_type": "BOOK",
145
- "publication_year": "1950"
146
- },
147
- {
148
- "$schema": "https://127.0.0.1:5000/schemas/documents/document-v2.0.0.json",
149
- "pid": "docid-12",
150
- "created_by": {"type": "script", "value": "demo"},
151
- "title": "Camera, equipment, and basic photographic techniques",
152
- "authors": [
153
- { "full_name": "Einstein, Albert" },
154
- { "full_name": "Stachel, John J et al." }
155
- ],
156
- "abstract": "This is a document volume v.1 part of a MULTIPART MONOGRAPH",
157
- "document_type": "THESIS",
158
- "publication_year": "1950"
159
- },
160
- {
161
- "$schema": "https://127.0.0.1:5000/schemas/documents/document-v2.0.0.json",
162
- "pid": "docid-13",
163
- "created_by": {"type": "script", "value": "demo"},
164
- "title": "Visual concepts and composition",
165
- "authors": [
166
- { "full_name": "Banek, Cora" },
167
- { "full_name": "Banek, Georg" }
168
- ],
169
- "abstract": "This is a document volume v.2 part of a MULTIPART MONOGRAPH",
170
- "document_type": "BOOK",
171
- "publication_year": "1950"
172
- },
173
- {
174
- "$schema": "https://127.0.0.1:5000/schemas/documents/document-v2.0.0.json",
175
- "pid": "docid-14",
176
- "created_by": {"type": "script", "value": "demo"},
177
- "title": "Flavor physics and the TeV scale",
178
- "authors": [{ "full_name": "Hou, George W S" }],
179
- "abstract": "This is a document part of a SERIAL",
180
- "document_type": "BOOK",
181
- "publication_year": "1950"
182
- },
183
- {
184
- "$schema": "https://127.0.0.1:5000/schemas/documents/document-v2.0.0.json",
185
- "pid": "docid-15",
186
- "created_by": {"type": "script", "value": "demo"},
187
- "title": "Symmetry and symmetry-breaking in semiconductors : fine structure of exciton states",
188
- "authors": [
189
- { "full_name": "Hönerlage, Bernd" },
190
- { "full_name": "Pelant, Ivan" }
191
- ],
192
- "abstract": "This is a document part of a SERIAL",
193
- "document_type": "BOOK",
194
- "publication_year": "1950"
195
- },
196
- {
197
- "$schema": "https://127.0.0.1:5000/schemas/documents/document-v2.0.0.json",
198
- "pid": "docid-16",
199
- "created_by": {"type": "script", "value": "demo"},
200
- "title": "Macroscopic quantum electrodynamics and ground-state Casimir, Casimir–Polder and van der Waals forces",
201
- "authors": [{ "full_name": "Buhmann, Stefan Yoshi" }],
202
- "abstract": "This is a document volume v.1 part of a MULTIPART MONOGRAPH part of a SERIAL",
203
- "document_type": "BOOK",
204
- "publication_year": "1950"
205
- },
206
- {
207
- "$schema": "https://127.0.0.1:5000/schemas/documents/document-v2.0.0.json",
208
- "pid": "docid-17",
209
- "created_by": {"type": "script", "value": "demo"},
210
- "title": "Many-body effects, excited atoms, finite temperature and quantum friction",
211
- "authors": [{ "full_name": "Buhmann, Stefan Yoshi" }],
212
- "abstract": "This is a document volume v.1 part of a MULTIPART MONOGRAPH part of a SERIAL",
213
- "document_type": "BOOK",
214
- "publication_year": "1950"
215
- },
216
- {
217
- "$schema": "https://127.0.0.1:5000/schemas/documents/document-v2.0.0.json",
218
- "pid": "docid-closed-access",
219
- "created_by": {"type": "script", "value": "demo"},
220
- "title": "Closed access document",
221
- "authors": [{ "full_name": "Buhmann, Stefan Yoshi" }],
222
- "abstract": "Just an abstract",
223
- "document_type": "BOOK",
224
- "restricted": true,
225
- "publication_year": "1950"
226
- },
227
- {
228
- "$schema": "https://127.0.0.1:5000/schemas/documents/document-v2.0.0.json",
229
- "pid": "docid-open-access",
230
- "created_by": {"type": "script", "value": "demo"},
231
- "title": "Open access document",
232
- "authors": [{ "full_name": "Buhmann, Stefan Yoshi" }],
233
- "abstract": "Just an abstract",
234
- "document_type": "BOOK",
235
- "restricted": false,
236
- "publication_year": "1950"
237
- }
238
- ]