Compare commits

...

26 Commits

Author SHA1 Message Date
Mojib Wali
c43c36ece3 v0.8.4 2022-03-11 10:47:10 +01:00
Mojib Wali
3acbaf65ef revert: use gettext 2022-03-11 10:40:58 +01:00
Mojib Wali
408bdc47b1 v0.8.3 2022-03-10 10:25:35 +01:00
Mojib Wali
6c6138b682 config: fix comment & import 2022-03-10 09:31:15 +01:00
Mojib Wali
cc2c462057 README: update links 2022-03-03 10:17:52 +01:00
Mojib Wali
3f2cf9f800 v0.8.2 2022-03-03 10:12:43 +01:00
Mojib Wali
db0c7a4e21 config: introduced in v8 of invenioRDM 2022-03-03 10:03:20 +01:00
Mojib Wali
91464bbd7c v0.8.1 2022-02-28 15:05:59 +01:00
Mojib Wali
d7fe2926c7 gloabl: changes to pre-v8
* config: set samesite cookie to strict
* dep: bump in base
2022-02-28 14:55:20 +01:00
Mojib Wali
d5fcf60cf7 v0.8.0 2022-02-09 16:29:35 +01:00
David Eckhard
772b21c93a config: add OAISERVER_ADMIN_EMAIL 2021-12-16 11:54:46 +01:00
mb-wali
c39221378f v0.7.1 2021-12-07 09:54:26 +01:00
mb-wali
a42f86fcdf configs: adds new & changed configs for v7 2021-12-06 14:44:05 +01:00
mb-wali
0dd0db04e2 v0.7.0 2021-12-06 09:45:11 +01:00
David Eckhard
b02ce8a755 fix: update blueprint reorder 2021-11-08 10:21:28 +01:00
Mojib
41dcb8f437 docs: adjust sphinx to flask 2
* Add werkzeug to intersphinx for additional type hints
* Describe type hints in bullet points rather than function signatures
* Remove 'warnings as errors' flag from documentation building, as some type hints aren't resolved properly and result in a warning
2021-11-04 10:55:33 +01:00
Mojib
35854691bd config: adds oai prefix 2021-11-04 10:55:33 +01:00
Mojib
f2e18b95c3 dep: upgrade rdm-records version
migrated allowed host to gitlab
2021-11-04 10:55:33 +01:00
Mojib Wali
16c10593d6 v0.6.2 2021-08-05 08:22:37 +02:00
mb-wali
dbd870d106 doi: remove doi 'datacite' suffix 2021-08-04 16:21:04 +02:00
mb-wali
f02e992acd dep: global dep bump
config: adds i18n vars & extracted from gitlab configs
config: form defaults and tighter CSP
2021-08-04 16:21:04 +02:00
Mojib Wali
a7abb0bc5e v0.6.1 2021-06-04 11:46:57 +02:00
mb-wali
7ca398efdd global: adds routes for tug
This: migrated from invenio-theme-tugraz
2021-06-04 11:46:08 +02:00
Mojib Wali
b33c7e09c3 v0.6.0 2021-05-31 13:12:06 +02:00
mb-wali
0c775851d8 refactor: removes search guide
due: added to core module. This closes #64
2021-05-31 13:09:30 +02:00
mb-wali
89f6aee814 migrate: invenioRDM v4
deb: bump in app-rdm
2021-05-31 13:09:30 +02:00
20 changed files with 203 additions and 347 deletions

View File

@@ -1,5 +1,5 @@
.. ..
Copyright (C) 2020 Mojib Wali. Copyright (C) 2020 - 2022 Graz University of Technology.
invenio-config-tugraz is free software; you can redistribute it and/or invenio-config-tugraz is free software; you can redistribute it and/or
modify it under the terms of the MIT License; see LICENSE file for more modify it under the terms of the MIT License; see LICENSE file for more
@@ -7,6 +7,35 @@
Changes Changes
======= =======
Version 0.8.4 (released 2022-03-11)
- config: use gettext
Version 0.8.3 (released 2022-03-10)
- config: fix comment & import
Version 0.8.2 (released 2022-03-03)
- config: new introduced to v8 of invenioRDM
Version 0.8.1 (released 2022-02-28)
- config: set samesite cookie to strict
- dep: bump in base dependencies
Version 0.8.0 (released 2022-02-09)
- dep: bump rdm-records version
Version 0.7.1 (released 2021-12-07)
- configs: adds new & changed configs for v7 #76
Version 0.7.0 (released 2021-12-06)
- fix: update blueprint reorder #74
- dep: upgrade rdm-records version & OAI #72
Version 0.1.0 (released TBD) Version 0.1.0 (released TBD)

View File

@@ -49,3 +49,6 @@ recursive-include invenio_config_tugraz *.html
# added by check-manifest # added by check-manifest
recursive-include invenio_config_tugraz *.csv recursive-include invenio_config_tugraz *.csv
# added by check-manifest
recursive-include invenio_config_tugraz *.pdf

View File

@@ -16,10 +16,10 @@
:target: https://pypi.python.org/pypi/invenio-config-tugraz :target: https://pypi.python.org/pypi/invenio-config-tugraz
.. image:: https://img.shields.io/github/tag/tu-graz-library/invenio-config-tugraz.svg .. image:: https://img.shields.io/github/tag/tu-graz-library/invenio-config-tugraz.svg
:target: https://github.com/mb-wali/invenio-config-tugraz/releases :target: https://github.com/tu-graz-library/invenio-config-tugraz/releases
.. image:: https://img.shields.io/github/license/tu-graz-library/invenio-config-tugraz.svg .. image:: https://img.shields.io/github/license/tu-graz-library/invenio-config-tugraz.svg
:target: https://github.com/mb-wali/invenio-config-tugraz/blob/master/LICENSE :target: https://github.com/tu-graz-library/invenio-config-tugraz/blob/master/LICENSE
.. image:: https://readthedocs.org/projects/invenio-config-tugraz/badge/?version=latest .. image:: https://readthedocs.org/projects/invenio-config-tugraz/badge/?version=latest
:target: https://invenio-config-tugraz.readthedocs.io/en/latest/?badge=latest :target: https://invenio-config-tugraz.readthedocs.io/en/latest/?badge=latest
@@ -38,6 +38,8 @@ Override configs from diffrent invenio modules to meet TU Graz requirement:
* Invenio-Mail * Invenio-Mail
* Invenio-shibboleth * Invenio-shibboleth
* Invenio-accounts * Invenio-accounts
* Flask-security
* Defined routes for TUG
Further documentation is available on Further documentation is available on
https://invenio-config-tugraz.readthedocs.io/ https://invenio-config-tugraz.readthedocs.io/

View File

@@ -332,6 +332,8 @@ texinfo_documents = [
# Example configuration for intersphinx: refer to the Python standard library. # Example configuration for intersphinx: refer to the Python standard library.
intersphinx_mapping = { intersphinx_mapping = {
"python": ("https://docs.python.org/", None), "python": ("https://docs.python.org/", None),
'flask': ('https://flask.palletsprojects.com/', None),
'werkzeug': ('https://werkzeug.palletsprojects.com/', None),
# TODO: Configure external documentation references, eg: # TODO: Configure external documentation references, eg:
# 'Flask-Admin': ('https://flask-admin.readthedocs.io/en/latest/', None), # 'Flask-Admin': ('https://flask-admin.readthedocs.io/en/latest/', None),
} }

View File

@@ -29,33 +29,26 @@ INVENIO_CONFIG_TUGRAZ_IP_RANGES =
[["127.0.0.2", "127.0.0.99"], ["127.0.1.3", "127.0.1.5"]] [["127.0.0.2", "127.0.0.99"], ["127.0.1.3", "127.0.1.5"]]
""" """
CONFIG_TUGRAZ_ROUTES = {
"guide": "/guide",
"terms": "/terms",
"gdpr": "/gdpr",
}
"""Defined routes for TUG."""
# Invenio-App # Invenio-App
# =========== # ===========
# See https://invenio-app.readthedocs.io/en/latest/configuration.html # See https://invenio-app.readthedocs.io/en/latest/configuration.html
APP_ALLOWED_HOSTS = [
"0.0.0.0",
"localhost",
"127.0.0.1",
"invenio-dev01.tugraz.at",
"invenio-test.tugraz.at",
"repository.tugraz.at",
]
"""Allowed Hosts"""
APP_DEFAULT_SECURE_HEADERS = { APP_DEFAULT_SECURE_HEADERS = {
"content_security_policy": { "content_security_policy": {
"default-src": [ "default-src": [
"'self'", "'self'",
"fonts.googleapis.com",
"*.gstatic.com",
"data:", "data:",
"'unsafe-inline'", "'unsafe-inline'",
"'unsafe-eval'",
"blob:", "blob:",
"ub-support.tugraz.at", # zammad contact form "ub-support.tugraz.at", # zammad contact form
"api.datacite.org/dois", # datacite
"api.test.datacite.org/dois", # datacite test
], ],
}, },
"content_security_policy_report_only": False, "content_security_policy_report_only": False,
@@ -73,6 +66,15 @@ APP_DEFAULT_SECURE_HEADERS = {
"strict_transport_security_preload": False, "strict_transport_security_preload": False,
} }
# Invenio-I18N
# ============
# See https://invenio-i18n.readthedocs.io/en/latest/configuration.html
BABEL_DEFAULT_LOCALE = "en"
# Default time zone
BABEL_DEFAULT_TIMEZONE = "Europe/Vienna"
# Other supported languages (do not include BABEL_DEFAULT_LOCALE in list).
I18N_LANGUAGES = [("de", _("German"))]
# Invenio-Mail # Invenio-Mail
# =========== # ===========
# See https://invenio-mail.readthedocs.io/en/latest/configuration.html # See https://invenio-mail.readthedocs.io/en/latest/configuration.html
@@ -113,19 +115,22 @@ Set this to False when sending actual emails.
# =========== # ===========
# See https://invenio-userprofiles.readthedocs.io/en/latest/configuration.html # See https://invenio-userprofiles.readthedocs.io/en/latest/configuration.html
USERPROFILES_EXTEND_SECURITY_FORMS = False USERPROFILES_EXTEND_SECURITY_FORMS = True
"""Set True in order to register user_profile. """Set True in order to register user_profile.
This also forces user to add username and fullname This also forces user to add username and fullname
when register. when register.
""" """
USERPROFILES_EMAIL_ENABLED = False USERPROFILES_EMAIL_ENABLED = True
"""Exclude the user email in the profile form.""" """Exclude the user email in the profile form."""
# Invenio-shibboleth USERPROFILES_READ_ONLY = True
"""Allow users to change profile info (name, email, etc...)."""
# Invenio-saml
# =========== # ===========
# See https://invenio-shibboleth.readthedocs.io/en/latest/configuration.html # See https://invenio-saml.readthedocs.io/en/latest/configuration.html
SSO_SAML_IDPS = {} SSO_SAML_IDPS = {}
"""Configuration of IDPS. Actual values can be find in to invenio.cfg file""" """Configuration of IDPS. Actual values can be find in to invenio.cfg file"""
@@ -153,13 +158,16 @@ SSO_SAML_DEFAULT_SLS_ROUTE = "/sls/<idp>"
# =========== # ===========
# See https://invenio-accounts.readthedocs.io/en/latest/configuration.html # See https://invenio-accounts.readthedocs.io/en/latest/configuration.html
ACCOUNTS_LOCAL_LOGIN_ENABLED = True
"""Allow local login."""
SECURITY_CHANGEABLE = False SECURITY_CHANGEABLE = False
"""Allow password change by users.""" """Allow password change by users."""
SECURITY_RECOVERABLE = False SECURITY_RECOVERABLE = False
"""Allow password recovery by users.""" """Allow password recovery by users."""
SECURITY_REGISTERABLE = False SECURITY_REGISTERABLE = True
""""Allow users to register. """"Allow users to register.
With this variable set to "False" users will not be With this variable set to "False" users will not be
@@ -228,20 +236,22 @@ password from ``users.yaml`` will be used. If that is also absent, a password
will be generated randomly. will be generated randomly.
""" """
# Custom Access Right DATACITE_FORMAT = "{prefix}/{id}"
# RDM_RECORDS_CUSTOM_VOCABULARIES = { """Customize the generated DOI string."""
# 'access_right': {
# 'path': join( DATACITE_DATACENTER_SYMBOL = ""
# dirname(abspath(__file__)), """"The OAI-PMH server's metadata format oai_datacite
# 'restrictions', 'access_right', 'access_right_limit.csv' that allows you to harvest record from InvenioRDM in DataCite XML needs
# ) to be configured with your DataCite data center symbol.
# } This is only required if you want your records to be harvestable in DataCite XML format.
# } """
# Invenio-app-rdm # Invenio-app-rdm
# ========================= # =========================
# See https://github.com/inveniosoftware/invenio-app-rdm/blob/master/invenio_app_rdm/config.py # See https://github.com/inveniosoftware/invenio-app-rdm/blob/master/invenio_app_rdm/config.py
APP_RDM_DEPOSIT_FORM_DEFAULTS = {} APP_RDM_DEPOSIT_FORM_DEFAULTS = {
"publisher": "Graz University of Technology",
}
"""Default values for new records in the deposit UI. """Default values for new records in the deposit UI.
The keys denote the dot-separated path, where in the record's metadata The keys denote the dot-separated path, where in the record's metadata
@@ -250,6 +260,17 @@ If the value is callable, its return value will be used for the field
(e.g. lambda/function for dynamic calculation of values). (e.g. lambda/function for dynamic calculation of values).
""" """
APP_RDM_DEPOSIT_FORM_AUTOCOMPLETE_NAMES = 'off'
"""Behavior for autocomplete names search field for creators/contributors.
Available options:
- ``search`` (default): Show search field and form always.
- ``search_only``: Only show search field. Form displayed after selection or
explicit "manual" entry.
- ``off``: Only show person form (no search field).
"""
SQLALCHEMY_ECHO = False SQLALCHEMY_ECHO = False
"""Enable to see all SQL queries.""" """Enable to see all SQL queries."""
@@ -311,3 +332,31 @@ reopened regularly.
See https://docs.sqlalchemy.org/en/latest/core/engines.html. See https://docs.sqlalchemy.org/en/latest/core/engines.html.
""" """
# Redis (cache)
# ========
# Cache or Redis configurations
RATELIMIT_AUTHENTICATED_USER = "25000 per hour;1000 per minute"
"""Increase defaults for authenticated users."""
RATELIMIT_GUEST_USER = "5000 per hour;500 per minute"
"""Increase defaults for guest users."""
SESSION_COOKIE_SAMESITE = 'Strict'
"""Sets cookie with the samesite flag to 'Strict' by default."""
# OAI-PMH
# =======
# See https://github.com/inveniosoftware/invenio-oaiserver/blob/master/invenio_oaiserver/config.py
OAISERVER_ID_PREFIX = "repository.tugraz.at"
"""The prefix that will be applied to the generated OAI-PMH ids."""
OAISERVER_ADMIN_EMAILS = [
'oai@repository.tugraz.at',
]
"""The e-mail addresses of administrators of the repository.
It **must** include one or more instances.
"""

View File

@@ -53,34 +53,34 @@ Using Custom Generator for a policy:
Permissions for Invenio (RDM) Records. Permissions for Invenio (RDM) Records.
""" """
from invenio_rdm_records.services import RDMRecordPermissionPolicy # from invenio_rdm_records.services import RDMRecordPermissionPolicy
from invenio_rdm_records.services.config import RDMRecordServiceConfig # from invenio_rdm_records.services.config import RDMRecordServiceConfig
from invenio_rdm_records.services.generators import IfDraft, IfRestricted, RecordOwners # from invenio_rdm_records.services.generators import IfDraft, IfRestricted, RecordOwners
from invenio_records_permissions.generators import ( # from invenio_records_permissions.generators import (
Admin, # Admin,
AnyUser, # AnyUser,
AuthenticatedUser, # AuthenticatedUser,
Disable, # Disable,
SuperUser, # SuperUser,
SystemProcess, # SystemProcess,
) # )
class TUGRAZPermissionPolicy(RDMRecordPermissionPolicy): # class TUGRAZPermissionPolicy(RDMRecordPermissionPolicy):
"""Access control configuration for rdm records. # """Access control configuration for rdm records.
This overrides the origin: # This overrides the origin:
https://github.com/inveniosoftware/invenio-rdm-records/blob/master/invenio_rdm_records/services/permissions.py. # https://github.com/inveniosoftware/invenio-rdm-records/blob/master/invenio_rdm_records/services/permissions.py.
Access control configuration for records. # Access control configuration for records.
Note that even if the array is empty, the invenio_access Permission class # Note that even if the array is empty, the invenio_access Permission class
always adds the ``superuser-access``, so admins will always be allowed. # always adds the ``superuser-access``, so admins will always be allowed.
- Create action given to everyone for now. # - Create action given to everyone for now.
- Read access given to everyone if public record and given to owners # - Read access given to everyone if public record and given to owners
always. (inherited) # always. (inherited)
- Update access given to record owners. (inherited) # - Update access given to record owners. (inherited)
- Delete access given to admins only. (inherited) # - Delete access given to admins only. (inherited)
""" # """
class TUGRAZRDMRecordServiceConfig(RDMRecordServiceConfig): # class TUGRAZRDMRecordServiceConfig(RDMRecordServiceConfig):
"""Overriding BibliographicRecordServiceConfig.""" # """Overriding BibliographicRecordServiceConfig."""

View File

@@ -1,257 +0,0 @@
{#
Copyright (C) 2021 CERN.
Copyright (C) 2021 Graz University of Technology.
Invenio App RDM is free software; you can redistribute it and/or modify it
under the terms of the MIT License; see LICENSE file for more details.
#}
{%- set title = _("Search guide") %}
{%- extends "invenio_theme/page.html" %}
{%- block page_body %}
<div class="ui container">
<h1>Suchanleitung</h1>
<p>
Diese Anleitung erklärt anhand von leicht verständlichen Beispielen,
wie man erweiterte Suchanfragen schreibt.
</p>
<h3>Einfache Suche (ein oder mehrere Begriffe)</h3>
<p>
<strong>Beispiel:</strong>
<a href="/search?page=1&amp;size=20&amp;q=open%20science"
><code>open science</code></a
>
</p>
<p>
Die Ergebnisse entsprechen Datensätzen mit den <em>Begriffen</em> <code>open</code>
<em>oder</em> <code>science</code> in einem <em>beliebigen Feld</em>. Beachten Sie, dass die Abstammung angewendet wird,
so dass z. B. <code>science</code> auch mit
<code>sciences</code>übereinstimmt. Die Suchergebnisse werden nach einem Algorithmus geordnet,
der Ihre Suchbegriffe berücksichtigt.
</p>
<p>
Sie können das <em>Vorhandensein</em> beider Terme entweder mit dem
<code>+</code> oder dem <code>AND</code> Operator verlangen:
</p>
<p>
<strong>Beispiele:</strong>
<a href="/search?page=1&amp;size=20&amp;q=%2Bopen%20%2Bscience"
><code>+open +science</code></a
>
oder
<a href="/search?page=1&amp;size=20&amp;q=open%20AND%20science"
><code>open AND science</code></a
>
</p>
<p>
Sie können das <em>Nichtvorhandensein</em> eines oder mehrerer Begriffe mit dem Operator
<code>-</code> oder <code>NOT</code> verlangen:
</p>
<p>
<strong>Beispiele:</strong>
<a href="/search?page=1&amp;size=20&amp;q=-open%20%2Bscience"
><code>-open +science</code></a
>
oder
<a href="/search?page=1&amp;size=20&amp;q=NOT%20open%20AND%20science"
><code>NOT open AND science</code></a
>
</p>
<h3>Phrasensuche</h3>
<p>
<strong>Beispiel:</strong>
<a href="/search?page=1&amp;size=20&amp;q=%22open%20science%22"
><code>"open science"</code></a
>
</p>
<p>
Die Ergebnisse entsprechen Datensätzen mit der <em>phrase</em>
<code>open science</code> in einem <em>beliebigen Feld</em>.
</p>
<h3>Feldsuche</h3>
<p>
<strong>Beispiel:</strong>
<a href="/search?page=1&amp;size=20&amp;q=metadata.title:open"
><code>metadata.title:open</code></a
>
</p>
<p>
Die Ergebnisse stimmen mit Datensätzen überein, bei denen der <em>Begriff</em> <code>open</code> im
<em>Feld</em> <code>metadata.title</code>ist. enn Sie nach mehreren Begriffen im Titel suchen möchten,
müssen Sie <strong>die Begriffe</strong> mit Klammern gruppieren:
</p>
<p>
<strong>Beispiel:</strong>
<a href="/search?page=1&amp;size=20&amp;q=metadata.title:(open%20science%29"
><code>metadata.title:(open science)</code></a
>
</p>
<p>
Die vollständige Liste der Felder, die Sie durchsuchen können, finden Sie in der Feldreferenz unten.
</p>
<h3>Kombinierte einfache, Phrasen- oder Feldsuche</h3>
<p>
<strong>Beispiel:</strong>
<a
href="/search?page=1&amp;size=20&amp;q=%2Bmetadata.title:%22open%20science%22%20-metadata.title:policy"
><code>+metadata.title:"open science" -metadata.title:policy</code></a
>
oder z. B.
<a href="/search?page=1&amp;size=20&amp;q=metadata.title:(-open%20%2Bscience%29"
><code>metadata.title:(-open +science)</code></a
>
</p>
<p>
Sie können einfache, Phrasen- und Feldsuche kombinieren, um erweiterte Suchanfragen zu konstruieren.
</p>
<h3>Bereichssuche</h3>
<p>
<strong>Beispiel:</strong>
<a
href="/search?page=1&amp;size=20&amp;q=metadata.publication_date:%5B2017%20TO%202018%5D"
><code>metadata.publication_date:[2017 TO 2018]</code></a
>
(Achtung, <code>TO</code> muss großgeschrieben werden).
</p>
<p>
Die Ergebnisse entsprechen allen Datensätzen mit einem Veröffentlichungsdatum
zwischen 2017-01-01 und 2018-01-01 (beide Daten inklusive).
</p>
<p>Beachten Sie, dass partielle Daten zu vollständigen Daten erweitert werden, z. B.:</p>
<ul>
<li>2017 wird erweitert auf 2017-01-01</li>
<li>2017-06 wird erweitert auf 2017-06-01</li>
</ul>
<p>
Verwenden Sie eckige Klammern (<code>[]</code>) für <em>einschließende</em> Bereiche und geschweifte
Klammern (<code>{}</code>) für <em>ausschließende</em> Bereiche, z. B.:
</p>
<ul>
<li>
<code>[2017 TO 2018}</code> ist aufgrund der Datumserweiterung
und der exklusiven Obergrenze äquivalent zu
<code>[2017-01-01 TO 2017-12-31]</code>.
</li>
</ul>
<p>Beispiele für andere Bereiche:</p>
<ul>
<li>
<code>metadata.publication_date:{* TO 2017-01-01}</code>: Alle Tage bis 2017.
</li>
<li>
<code>metadata.publication_date:[2017-01-01 TO *]</code>: Alle Tage von 2017.
</li>
</ul>
<h3>Ranking/Sortierung</h3>
<p>
Standardmäßig werden alle Suchen nach einem internen Ranking-Algorithmus sortiert,
der jede Übereinstimmung mit Ihrer Abfrage bewertet. Sowohl in der Benutzeroberfläche
als auch in der REST-API ist es möglich, die Ergebnisse zu sortieren nach:
</p>
<ul>
<li>Aktuellste</li>
<li>Beste Übereinstimmung</li>
</ul>
<h3>Reguläre Ausdrücke</h3>
<p>
Reguläre Ausdrücke sind eine mächtige Sprache für den Mustervergleich, mit der
man nach bestimmten Mustern in einem Feld suchen kann. Wenn wir zum Beispiel
alle Datensätze mit dem DOI-Präfix 10.5281 finden wollen, können wir eine Suche mit
regulären Ausdrücken verwenden:
</p>
<p>
<strong>Beispiel:</strong>
<a href="/search?page=1&amp;size=20&amp;q=metadata.subjects.identifier:%2F03yrm5c2%5B1%2C6%5D%2F"
><code>metadata.subjects.identifier:/03yrm5c2[1,6]/</code></a
>
</p>
<p>
Vorsicht, der reguläre Ausdruck muss mit dem <em>gesamten</em> Feldwert übereinstimmen.
Weitere Einzelheiten finden Sie in der
<a
href="https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html#regexp-syntax"
>Syntax des regulären Ausdrucks</a
>
.
</p>
<h3>Fehlende Werte</h3>
<p>
Es ist möglich, mit den Feldnamen <code>_exists_</code> und
<code>_missing_</code> nach Datensätzen zu suchen,
in denen entweder ein Wert fehlt oder die einen Wert in einem bestimmten Feld haben.
</p>
<p>
<strong>Beispiel:</strong>
<a href="/search?page=1&amp;size=20&amp;q=_missing_:metadata.additional_titles"
><code>_missing_:metadata.additional_titles</code></a
>
(alle Datensätze ohne metadata.additional_titles)
</p>
<p>
<strong>Beispiel:</strong>
<a href="/search?page=1&amp;size=20&amp;q=_exists_:metadata.creators"
><code>_exists_:metadata.creators</code></a
>
(alle Datensätze mit metadata.creators)
</p>
<h3>Erweiterte Konzepte</h3>
<h4>Boosten</h4>
<p>
Sie können den Boost-Operator <code>^</code> verwenden, wenn ein Begriff relevanter ist als ein
anderer. Sie können z. B. nach allen Datensätzen suchen, die den Ausdruck
<em>open science</em> entweder <em>im title</em> oder im
<em>description</em> feld enthalten, aber Datensätze mit dem Ausdruck im
<em>title</em> feld höher einstufen:
</p>
<p>
<strong>Beispiel:</strong>
<a
href="/search?page=1&amp;size=20&amp;q=metadata.title:%22open%20science%22%5E5%20metadata.description:%22open%20science%22"
><code>metadata.title:"open science"^5 metadata.description:"open science"</code></a
>
</p>
<h4>Unschärfe</h4>
<p>
Mit dem Fuzzy-Operator <code>~</code>können Sie nach
Begriffen suchen, die Ihrem Suchbegriff ähnlich, aber nicht genau gleich sind.
</p>
<p>
<strong>Beispiel:</strong>
<a href="/search?page=1&amp;size=20&amp;q=oepn~"><code>oepn~</code></a>
</p>
<p>
Die Ergebnisse entsprechen Datensätzen mit ähnlichen Begriffen wie <code>oepn</code> die z. B.
auch auf <code>open</code> passen würden.
</p>
<h4>Näherungssuche</h4>
<p>
Eine Phrasensuche wie <code>"open science"</code> erwartet standardmäßig alle Begriffe in
genau der gleichen Reihenfolge und würde daher z. B. nicht auf einen Datensatz
passen, der die Phrase <em>"open access and science"</em> enthält.
Eine Proximity-Suche erlaubt, dass die Begriffe nicht in der exakten Reihenfolge stehen
und auch andere Begriffe dazwischen enthalten können.
Der Grad der Flexibilität wird anschließend durch eine Ganzzahl angegeben:
</p>
<p>
<strong>Beispiel:</strong>
<a href="/search?page=1&amp;size=20&amp;q=%22open%20science%22~5"
><code>"open science"~5</code></a
>
</p>
<h4>Wildcards</h4>
<p>
Sie können Wildcards in Suchbegriffen verwenden, um ein einzelnes Zeichen (mit
dem Operator<code>?</code> operator) oder null oder mehr Zeichen (mit dem Operator
<code>*</code> ) zu ersetzen.
</p>
<p>
<strong>Beispiel:</strong>
<a href="/search?page=1&amp;size=20&amp;q=ope%3F%20scien*"
><code>ope? scien*</code></a
>
</p>
<p>
Platzhaltersuchen können langsam sein und sollten normalerweise nach Möglichkeit vermieden werden.
</p>
</div>
{%- endblock page_body%}

View File

@@ -4,10 +4,10 @@
{{ _('To help you get started, here are some useful links:') }} {{ _('To help you get started, here are some useful links:') }}
- {{ _('Guidelines:')}} {{ _('Repository Guide')}} ({{ _('how to upload files')}}) (https://{{ config.SITE_HOSTNAME }}{{ url_for('invenio_theme_tugraz.guide') }}) - {{ _('Guidelines:')}} {{ _('Repository Guide')}} ({{ _('how to upload files')}}) (https://{{ config.SITE_HOSTNAME }}{{ url_for('invenio_config_tugraz.guide') }})
- {{ _('Search Guide')}} (https://{{ config.SITE_HOSTNAME }}{{url_for('invenio_app_rdm.help_search')}}) - {{ _('Search Guide')}} (https://{{ config.SITE_HOSTNAME }}{{url_for('invenio_app_rdm.help_search')}})
- {{ _('Terms And Conditions') }} (https://{{ config.SITE_HOSTNAME }}{{ url_for('invenio_theme_tugraz.terms') }}) - {{ _('Terms And Conditions') }} (https://{{ config.SITE_HOSTNAME }}{{ url_for('invenio_config_tugraz.terms') }})
- {{ _('Data Protection Rights')}} (https://{{ config.SITE_HOSTNAME }}{{ url_for('invenio_theme_tugraz.gdpr') }}) - {{ _('Data Protection Rights')}} (https://{{ config.SITE_HOSTNAME }}{{ url_for('invenio_config_tugraz.gdpr') }})
{% if security.confirmable %} {% if security.confirmable %}
{{ _('You can confirm your email through the link below:') }} {{ _('You can confirm your email through the link below:') }}
{{ confirmation_link }}"> {{ confirmation_link }}">

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# Copyright (C) 2020 Mojib Wali. # Copyright (C) 2020-2022 Graz University of Technology.
# #
# invenio-config-tugraz is free software; you can redistribute it and/or # invenio-config-tugraz is free software; you can redistribute it and/or
# modify it under the terms of the MIT License; see LICENSE file for more # modify it under the terms of the MIT License; see LICENSE file for more
@@ -12,4 +12,4 @@ This file is imported by ``invenio_config_tugraz.__init__``,
and parsed by ``setup.py``. and parsed by ``setup.py``.
""" """
__version__ = "0.5.9" __version__ = "0.8.4"

View File

@@ -12,33 +12,62 @@ from os import environ
from typing import Dict from typing import Dict
from elasticsearch_dsl.utils import AttrDict from elasticsearch_dsl.utils import AttrDict
from flask import Blueprint, current_app from flask import Blueprint, current_app, redirect, url_for
from flask_babelex import get_locale
def ui_blueprint(app): def ui_blueprint(app):
"""Blueprint for the routes and resources provided by invenio-config-tugraz.""" """Blueprint for the routes and resources provided by invenio-config-tugraz."""
routes = app.config.get("CONFIG_TUGRAZ_ROUTES")
blueprint = Blueprint( blueprint = Blueprint(
"invenio_config_tugraz", "invenio_config_tugraz",
__name__, __name__,
template_folder="templates", template_folder="templates",
static_folder="static",
) )
blueprint.add_url_rule(routes["guide"], view_func=guide)
blueprint.add_url_rule(routes["terms"], view_func=terms)
blueprint.add_url_rule(routes["gdpr"], view_func=gdpr)
@blueprint.before_app_first_request @blueprint.before_app_first_request
def rank_higher(): def rank_higher():
"""Rank this modules blueprint higher than blueprint of security module.""" """Rank this modules blueprint higher than blueprint of security module.
blueprints = current_app._blueprint_order
our_index = None
security_index = None
for index, bp in enumerate(blueprints): Needed in order to overwrite email templates.
if bp.name == "security":
security_index = index
if bp.name == "invenio_config_tugraz":
our_index = index
if (security_index is not None) and (our_index > security_index): Since the blueprints are in a dict and the order of insertion is
temp = blueprints[security_index] retained, popping and reinserting all items (except ours), ensures
blueprints[security_index] = blueprints[our_index] our blueprint will be in front.
blueprints[our_index] = temp """
bps = current_app.blueprints
for blueprint_name in list(bps.keys()):
if blueprint_name != "invenio_config_tugraz":
bps.update({blueprint_name: bps.pop(blueprint_name)})
return blueprint return blueprint
def guide():
"""TUGraz_Repository_Guide."""
locale = get_locale()
return redirect(url_for('static',
filename=f'documents/TUGraz_Repository_Guide_02_{locale}.pdf',
_external=True))
def terms():
"""Terms_And_Conditions."""
locale = get_locale()
return redirect(url_for('static',
filename=f'documents/TUGraz_Repository_Terms_And_Conditions_{locale}.pdf',
_external=True))
def gdpr():
"""General_Data_Protection_Rights."""
locale = get_locale()
return redirect(url_for('static',
filename=f'documents/TUGraz_Repository_General_Data_Protection_Rights_{locale}.pdf',
_external=True))

View File

@@ -25,9 +25,9 @@ trap cleanup EXIT
python -m check_manifest --ignore ".*-requirements.txt" python -m check_manifest --ignore ".*-requirements.txt"
python -m sphinx.cmd.build -qnNW docs docs/_build/html python -m sphinx.cmd.build -qnN docs docs/_build/html
eval "$(docker-services-cli up --db ${DB:-postgresql} --search ${SEARCH:-elasticsearch} --cache ${CACHE:-redis} --env)" eval "$(docker-services-cli up --db ${DB:-postgresql} --search ${SEARCH:-elasticsearch} --cache ${CACHE:-redis} --env)"
python -m pytest python -m pytest
tests_exit_code=$? tests_exit_code=$?
python -m sphinx.cmd.build -qnNW -b doctest docs docs/_build/doctest python -m sphinx.cmd.build -qnN -b doctest docs docs/_build/doctest
exit "$tests_exit_code" exit "$tests_exit_code"

View File

@@ -16,13 +16,12 @@ readme = open("README.rst").read()
history = open("CHANGES.rst").read() history = open("CHANGES.rst").read()
tests_require = [ tests_require = [
"pytest-invenio>=1.4.0", "pytest-invenio>=1.4.1",
"invenio-app>=1.3.0,<2.0.0",
] ]
# Should follow invenio-app-rdm # Should follow invenio-app-rdm
invenio_search_version = ">=1.4.0,<1.5.0" invenio_search_version = ">=1.4.2,<1.5.0"
invenio_db_version = ">=1.0.9,<1.1.0" invenio_db_version = ">=1.0.11,<1.1.0"
extras_require = { extras_require = {
"elasticsearch7": [f"invenio-search[elasticsearch7]{invenio_search_version}"], "elasticsearch7": [f"invenio-search[elasticsearch7]{invenio_search_version}"],
@@ -30,7 +29,7 @@ extras_require = {
"postgresql": [f"invenio-db[postgresql,versioning]{invenio_db_version}"], "postgresql": [f"invenio-db[postgresql,versioning]{invenio_db_version}"],
"sqlite": [f"invenio-db[versioning]{invenio_db_version}"], "sqlite": [f"invenio-db[versioning]{invenio_db_version}"],
"docs": [ "docs": [
"Sphinx>=3", "Sphinx==4.2.0",
], ],
"tests": tests_require, "tests": tests_require,
} }
@@ -47,14 +46,13 @@ for name, reqs in extras_require.items():
extras_require["all"].extend(reqs) extras_require["all"].extend(reqs)
setup_requires = [ setup_requires = [
"Babel>=1.3", "Babel>=2.8,<3",
"pytest-runner>=3.0.0,<5",
] ]
install_requires = [ install_requires = [
"Flask-BabelEx>=0.9.4",
# keep this in sync with invenioRDM release # keep this in sync with invenioRDM release
"invenio_app_rdm==3.0.0", "invenio-rdm-records>=0.34.5,<0.35.0",
"invenio-cache>=1.1.0"
] ]
packages = find_packages() packages = find_packages()
@@ -110,6 +108,7 @@ setup(
"Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.8",
"Development Status :: 3 - Alpha", "Programming Language :: Python :: 3.9",
"Development Status :: 5 - Production/Stable",
], ],
) )