Compare commits

..

16 Commits

Author SHA1 Message Date
Mojib Wali
44e5857143 v0.5.9 2021-05-07 12:01:04 +02:00
mb-wali
460de9fc35 feature: adds searchguide german 2021-05-07 11:02:25 +02:00
Mojib Wali
b1d7a6558e v0.5.8 2021-04-30 13:32:46 +02:00
mb-wali
890fded625 dep: installing invenio-app-rdm 2021-04-30 13:32:23 +02:00
Mojib Wali
1304563a3e v0.5.7 2021-04-28 09:01:04 +02:00
mb-wali
a08201041a bugfix: search guide url 2021-04-28 08:54:48 +02:00
Mojib Wali
548896be11 v0.5.6 2021-04-27 15:53:59 +02:00
Mojib Wali
a10433aba3 email: welcome email template 2021-04-27 15:48:05 +02:00
Mojib Wali
f0fbabbaa8 v0.5.5 2021-04-22 09:46:08 +02:00
Mojib Wali
5e2a58c764 i18n: adds translation
* babel: adds a wildcard to extract txt files.
* refactor txt file
2021-04-22 09:45:42 +02:00
Mojib Wali
9af1beff88 v0.5.4 2021-04-21 16:11:09 +02:00
rekt-hard
80575cbced feature: override email welcome template
* overrides flask-security welcome template
2021-04-21 16:10:30 +02:00
Unix
60b85e6ad5 global: repo cleanup 2021-03-31 14:22:32 +02:00
Mojib Wali
10f68379b5 v0.5.3 2021-03-29 10:06:21 +02:00
Mojib Wali
49766790d7 config: refactor email subject. 2021-03-24 09:42:41 +01:00
Mojib Wali
977d5588f4 refactor: changed the link to point correct repo. 2021-03-18 13:55:35 +01:00
18 changed files with 581 additions and 149 deletions

View File

@@ -20,9 +20,42 @@ jobs:
runs-on: ubuntu-20.04
strategy:
matrix:
python-version: [3.6, 3.7, 3.8]
python-version: [3.6, 3.7, 3.8, 3.9]
requirements-level: [min, pypi]
db-service: [postgresql12]
search-service: [elasticsearch7]
exclude:
- python-version: 3.6
requirements-level: pypi
- python-version: 3.7
requirements-level: min
- python-version: 3.8
requirements-level: min
- python-version: 3.9
requirements-level: min
- db-service: postgresql12
requirements-level: min
- search-service: elasticsearch7
requirements-level: min
include:
- db-service: postgresql12
DB_EXTRAS: "postgresql"
- search-service: elasticsearch7
SEARCH_EXTRAS: "elasticsearch7"
env:
DB: ${{ matrix.db-service }}
SEARCH: ${{ matrix.search-service }}
EXTRAS: all,${{ matrix.DB_EXTRAS }},${{ matrix.SEARCH_EXTRAS }}
steps:
- name: Checkout
uses: actions/checkout@v2
@@ -35,8 +68,7 @@ jobs:
- name: Generate dependencies
run: |
python -m pip install --upgrade pip setuptools py wheel requirements-builder
requirements-builder -e all --level=${{ matrix.requirements-level }} setup.py > .${{ matrix.requirements-level }}-${{ matrix.python-version }}-requirements.txt
requirements-builder -e "$EXTRAS" --level=${{ matrix.requirements-level }} setup.py > .${{ matrix.requirements-level }}-${{ matrix.python-version }}-requirements.txt
- name: Cache pip
uses: actions/cache@v2
with:
@@ -45,10 +77,11 @@ jobs:
- name: Install dependencies
run: |
pip install -r .${{matrix.requirements-level}}-${{ matrix.python-version }}-requirements.txt
pip install .[all]
pip install -r .${{ matrix.requirements-level }}-${{ matrix.python-version }}-requirements.txt
pip install ".[$EXTRAS]"
pip freeze
docker --version
docker-compose --version
- name: Run tests
run: |
./run-tests.sh
./run-tests.sh

View File

@@ -34,15 +34,18 @@ recursive-include docs *.py
recursive-include docs *.rst
recursive-include docs *.txt
recursive-include docs Makefile
recursive-include invenio_config_tugraz *.html
recursive-include tests *.py
# added by check_manifest.py
recursive-include invenio_config_tugraz *.crt
recursive-include invenio_config_tugraz *.json
recursive-include invenio_config_tugraz *.key
recursive-include invenio_config_tugraz *.xml
recursive-include invenio_config_tugraz *.gitkeep
recursive-include invenio_config_tugraz *.txt
recursive-include invenio_config_tugraz *.html
# added by check-manifest
recursive-include invenio_config_tugraz *.csv

View File

@@ -1,5 +1,5 @@
..
Copyright (C) 2020 Mojib Wali.
Copyright (C) 2020-2021 Graz University of Technology.
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
@@ -15,10 +15,10 @@
.. image:: https://img.shields.io/pypi/dm/invenio-config-tugraz.svg
:target: https://pypi.python.org/pypi/invenio-config-tugraz
.. image:: https://img.shields.io/github/tag/mb-wali/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
.. image:: https://img.shields.io/github/license/mb-wali/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
.. image:: https://readthedocs.org/projects/invenio-config-tugraz/badge/?version=latest

View File

@@ -13,7 +13,7 @@ encoding = utf-8
# Extraction from Jinja2 templates
[jinja2: **/templates/**.html]
[jinja2: **/templates/**.*]
encoding = utf-8
extensions = jinja2.ext.autoescape, jinja2.ext.with_

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2020 Graz University of Technology.
# Copyright (C) 2020-2021 Graz University of Technology.
#
# 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
@@ -49,40 +49,40 @@ Using Custom Generator for a policy:
Permissions for Invenio records.
"""
from invenio_records_permissions.generators import (
Admin,
AnyUser,
AnyUserIfPublic,
RecordOwners,
)
from invenio_records_permissions.policies.base import BasePermissionPolicy
# from invenio_records_permissions.generators import (
# Admin,
# AnyUser,
# AnyUserIfPublic,
# RecordOwners,
# )
# from invenio_records_permissions.policies.base import BasePermissionPolicy
from .generators import RecordIp
# from .generators import RecordIp
class TUGRAZPermissionPolicy(BasePermissionPolicy):
"""Access control configuration for records.
# class TUGRAZPermissionPolicy(BasePermissionPolicy):
# """Access control configuration for records.
This overrides the /api/records endpoint.
# This overrides the /api/records endpoint.
"""
# """
# Read access to API given to everyone.
can_search = [AnyUser(), RecordIp()]
# # Read access to API given to everyone.
# can_search = [AnyUser(), RecordIp()]
# Read access given to everyone if public record/files and owners always.
can_read = [AnyUserIfPublic(), RecordOwners(), RecordIp()]
# # Read access given to everyone if public record/files and owners always.
# can_read = [AnyUserIfPublic(), RecordOwners(), RecordIp()]
# Create action given to no one (Not even superusers) bc Deposits should
# be used.
can_create = [AnyUser()]
# # Create action given to no one (Not even superusers) bc Deposits should
# # be used.
# can_create = [AnyUser()]
# Update access given to record owners.
can_update = [RecordOwners()]
# # Update access given to record owners.
# can_update = [RecordOwners()]
# Delete access given to admins only.
can_delete = [Admin()]
# # Delete access given to admins only.
# can_delete = [Admin()]
# Associated files permissions (which are really bucket permissions)
can_read_files = [AnyUserIfPublic(), RecordOwners()]
can_update_files = [RecordOwners()]
# # Associated files permissions (which are really bucket permissions)
# can_read_files = [AnyUserIfPublic(), RecordOwners()]
# can_update_files = [RecordOwners()]

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2020 Graz University of Technology.
# Copyright (C) 2020-2021 Graz University of Technology.
#
# 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
@@ -84,7 +84,7 @@ SECURITY_EMAIL_SENDER = "info@invenio-test.tugraz.at"
"""Email address used as sender of account registration emails."""
"""Domain name should match the domain used in web server."""
SECURITY_EMAIL_SUBJECT_REGISTER = _("Welcome to RDM!")
SECURITY_EMAIL_SUBJECT_REGISTER = _("Welcome to TU Graz Repository!")
"""Email subject for account registration emails."""
MAIL_SUPPRESS_SEND = True
@@ -172,6 +172,15 @@ SECURITY_CONFIRMABLE = False
Instead user will get a welcome email.
"""
# Flask-Security
# =============
# See https://pythonhosted.org/Flask-Security/configuration.html
SECURITY_EMAIL_PLAINTEXT = True
"""Render email content as plaintext."""
SECURITY_EMAIL_HTML = False
"""Render email content as HTML."""
ACCOUNTS = True
"""Tells if the templates should use the accounts module.
@@ -198,16 +207,9 @@ RECAPTCHA_PRIVATE_KEY = None
# =======
# See:
# https://invenio-records-permissions.readthedocs.io/en/latest/configuration.html
#
# Uncomment these to enable overriding Base permissions - (NOT RECOMMANDED)
# RECORDS_PERMISSIONS_RECORD_POLICY = (
# 'invenio_config_tugraz.base_permissions.TUGRAZPermissionPolicy'
# )
#
# Uncomment these to enable overriding RDM permissions
# RDM_RECORDS_BIBLIOGRAPHIC_SERVICE_CONFIG = (
# 'invenio_config_tugraz.rdm_permissions.TUGRAZBibliographicRecordServiceConfig'
# )
# from .rdm_permissions import TUGRAZRDMRecordServiceConfig
# RDM_RECORDS_BIBLIOGRAPHIC_SERVICE_CONFIG = TUGRAZRDMRecordServiceConfig
"""Access control configuration for records."""
# invenio-rdm-records
@@ -215,9 +217,7 @@ RECAPTCHA_PRIVATE_KEY = None
# See:
# https://invenio-rdm-records.readthedocs.io/en/latest/configuration.html
#
RDM_RECORDS_USER_FIXTURE_PASSWORDS = {
"info@tugraz.at": None
}
RDM_RECORDS_USER_FIXTURE_PASSWORDS = {"info@tugraz.at": None}
"""Overrides for the user fixtures' passwords.
The password set for a user fixture in this dictionary overrides the
password set in the ``users.yaml`` file. This can be used to set custom

View File

@@ -7,6 +7,7 @@
# details.
"""invenio module that adds tugraz configs."""
from flask import Blueprint
from . import config

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2020 Mojib Wali.
# Copyright (C) 2020-2021 Graz University of Technology.
#
# 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
@@ -153,7 +153,7 @@ The succinct encoding of the permissions for your instance gives you
from elasticsearch_dsl.query import Q
from flask import current_app, request
from invenio_access.permissions import any_user, authenticated_user, superuser_access
from invenio_access.permissions import any_user, superuser_access
from invenio_records_permissions.generators import Generator
@@ -221,20 +221,3 @@ class RecordIp(Generator):
if user_ip in current_app.config["INVENIO_CONFIG_TUGRAZ_SINGLE_IP"]:
return True
return False
class AuthenticatedUser(Generator):
"""Allows authenticated users."""
def __init__(self):
"""Constructor."""
super(AuthenticatedUser, self).__init__()
def needs(self, **kwargs):
"""Enabling Needs."""
return [authenticated_user]
def query_filter(self, **kwargs):
"""Filters for current identity as super user."""
# TODO: Implement with new permissions metadata
return []

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2020 Graz University of Technology.
# Copyright (C) 2020-2021 Graz University of Technology.
#
# 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
@@ -53,59 +53,34 @@ Using Custom Generator for a policy:
Permissions for Invenio (RDM) Records.
"""
from invenio_rdm_records.services import (
BibliographicRecordServiceConfig,
RDMRecordPermissionPolicy,
)
from invenio_rdm_records.services import RDMRecordPermissionPolicy
from invenio_rdm_records.services.config import RDMRecordServiceConfig
from invenio_rdm_records.services.generators import IfDraft, IfRestricted, RecordOwners
from invenio_records_permissions.generators import (
Admin,
AnyUser,
RecordOwners,
AuthenticatedUser,
Disable,
SuperUser,
SystemProcess,
)
from .generators import AuthenticatedUser, RecordIp
class TUGRAZPermissionPolicy(RDMRecordPermissionPolicy):
"""Access control configuration for rdm records.
This overrides the origin:
https://github.com/inveniosoftware/invenio-rdm-records/blob/master/invenio_rdm_records/services/permissions.py.
Access control configuration for records.
Note that even if the array is empty, the invenio_access Permission class
always adds the ``superuser-access``, so admins will always be allowed.
- Create action given to everyone for now.
- Read access given to everyone if public record and given to owners
always. (inherited)
- Update access given to record owners. (inherited)
- Delete access given to admins only. (inherited)
"""
# Read access given to:
# TODO:
# AnyUserIfPublic : grant access if record is public
# RecordIp: grant access for single_ip
# RecordOwners: owner of records, enable once the deposit is allowed only for loged-in users.
# CURRENT:
# RecordIp: grant access for single_ip
can_read = [RecordIp()] # RecordOwners()
# Search access given to:
# AnyUser : grant access anyUser
# RecordIp: grant access for single_ip
can_search = [AnyUser(), RecordIp()]
# Update access given to record owners.
can_update = [RecordOwners()]
# Delete access given to admins only.
can_delete = [Admin()]
# Create action given to AuthenticatedUser
# UI - if user is loged in
# API - if user has Access token (Bearer API-TOKEN)
can_create = [AuthenticatedUser()]
# Associated files permissions (which are really bucket permissions)
# can_read_files = [AnyUserIfPublic(), RecordOwners()]
# can_update_files = [RecordOwners()]
class TUGRAZBibliographicRecordServiceConfig(BibliographicRecordServiceConfig):
class TUGRAZRDMRecordServiceConfig(RDMRecordServiceConfig):
"""Overriding BibliographicRecordServiceConfig."""
permission_policy_cls = TUGRAZPermissionPolicy

View File

@@ -0,0 +1,257 @@
{#
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

@@ -0,0 +1,18 @@
{{ _('Dear user,') }}
{{ _('Welcome to the Repository of TU Graz!') }}
{{ _('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') }})
- {{ _('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') }})
- {{ _('Data Protection Rights')}} (https://{{ config.SITE_HOSTNAME }}{{ url_for('invenio_theme_tugraz.gdpr') }})
{% if security.confirmable %}
{{ _('You can confirm your email through the link below:') }}
{{ confirmation_link }}">
{% endif %}
{{ _('If you require any assistance please do not hesitate to contact us at repository-support@tugraz.at.') }}
{{ _('Best regards,') }}
{{ _('TU Graz Repository Team') }}

View File

@@ -1,15 +1,15 @@
# German translations for invenio-config-tugraz.
# Copyright (C) 2020 Mojib Wali
# Copyright (C) 2021 Graz University of Technology
# This file is distributed under the same license as the
# invenio-config-tugraz project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2021.
#
msgid ""
msgstr ""
"Project-Id-Version: invenio-config-tugraz 0.1.5\n"
"Project-Id-Version: invenio-config-tugraz 0.5.5\n"
"Report-Msgid-Bugs-To: mojib.wali@tugraz.at\n"
"POT-Creation-Date: 2020-10-06 09:28+0200\n"
"PO-Revision-Date: 2020-10-06 09:28+0200\n"
"POT-Creation-Date: 2021-04-27 15:30+0200\n"
"PO-Revision-Date: 2021-04-22 11:57+0200\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: de\n"
"Language-Team: de <LL@li.org>\n"
@@ -17,9 +17,67 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.8.0\n"
"Generated-By: Babel 2.9.0\n"
#: invenio_config_tugraz/config.py:80
msgid "Welcome to RDM!"
#: invenio_config_tugraz/config.py:87
msgid "Welcome to TU Graz Repository!"
msgstr "Willkommen im TU Graz Repository!"
#: invenio_config_tugraz/templates/security/email/welcome.txt:1
msgid "Dear user,"
msgstr "Lieber Nutzer,"
#: invenio_config_tugraz/templates/security/email/welcome.txt:3
msgid "Welcome to the Repository of TU Graz!"
msgstr "Willkommen im TU Graz Repository!"
#: invenio_config_tugraz/templates/security/email/welcome.txt:5
msgid "To help you get started, here are some useful links:"
msgstr ""
"Um Ihnen den Einstieg zu erleichtern, finden Sie hier einige nützliche "
"Links:"
#: invenio_config_tugraz/templates/security/email/welcome.txt:7
msgid "Guidelines:"
msgstr "Leitfaden:"
#: invenio_config_tugraz/templates/security/email/welcome.txt:7
msgid "Repository Guide"
msgstr "Handbuch"
#: invenio_config_tugraz/templates/security/email/welcome.txt:7
msgid "how to upload files"
msgstr "wie man Dateien hochlädt"
#: invenio_config_tugraz/templates/security/email/welcome.txt:8
msgid "Search Guide"
msgstr "Suchanleitung"
#: invenio_config_tugraz/templates/security/email/welcome.txt:9
msgid "Terms And Conditions"
msgstr "Nutzungsbedingungen"
#: invenio_config_tugraz/templates/security/email/welcome.txt:10
msgid "Data Protection Rights"
msgstr "Datenschutzerklärung"
#: invenio_config_tugraz/templates/security/email/welcome.txt:13
msgid "You can confirm your email through the link below:"
msgstr "Sie können Ihre E-Mail über den folgenden Link bestätigen:"
#: invenio_config_tugraz/templates/security/email/welcome.txt:16
msgid ""
"If you require any assistance please do not hesitate to contact us at "
"repository-support@tugraz.at."
msgstr ""
"Wenn Sie Hilfe benötigen, zögern Sie bitte nicht, uns unter repository-"
"support@tugraz.at zu kontaktieren."
#: invenio_config_tugraz/templates/security/email/welcome.txt:18
msgid "Best regards,"
msgstr "Mit freundlichen Grüßen,"
#: invenio_config_tugraz/templates/security/email/welcome.txt:19
msgid "TU Graz Repository Team"
msgstr "TU Graz Repository Team"

View File

@@ -1,24 +1,78 @@
# Translations template for invenio-config-tugraz.
# Copyright (C) 2020 Mojib Wali
# Copyright (C) 2021 Graz University of Technology
# This file is distributed under the same license as the
# invenio-config-tugraz project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2021.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: invenio-config-tugraz 0.1.5\n"
"Project-Id-Version: invenio-config-tugraz 0.5.5\n"
"Report-Msgid-Bugs-To: mojib.wali@tugraz.at\n"
"POT-Creation-Date: 2020-10-06 09:28+0200\n"
"POT-Creation-Date: 2021-04-27 15:30+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.8.0\n"
"Generated-By: Babel 2.9.0\n"
#: invenio_config_tugraz/config.py:80
msgid "Welcome to RDM!"
#: invenio_config_tugraz/config.py:87
msgid "Welcome to TU Graz Repository!"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:1
msgid "Dear user,"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:3
msgid "Welcome to the Repository of TU Graz!"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:5
msgid "To help you get started, here are some useful links:"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:7
msgid "Guidelines:"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:7
msgid "Repository Guide"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:7
msgid "how to upload files"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:8
msgid "Search Guide"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:9
msgid "Terms And Conditions"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:10
msgid "Data Protection Rights"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:13
msgid "You can confirm your email through the link below:"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:16
msgid ""
"If you require any assistance please do not hesitate to contact us at "
"repository-support@tugraz.at."
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:18
msgid "Best regards,"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:19
msgid "TU Graz Repository Team"
msgstr ""

View File

@@ -12,4 +12,4 @@ This file is imported by ``invenio_config_tugraz.__init__``,
and parsed by ``setup.py``.
"""
__version__ = "0.5.2"
__version__ = "0.5.9"

View File

@@ -0,0 +1,44 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2020-2021 Graz University of Technology.
#
# 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
# details.
"""invenio module for TUGRAZ config."""
from os import environ
from typing import Dict
from elasticsearch_dsl.utils import AttrDict
from flask import Blueprint, current_app
def ui_blueprint(app):
"""Blueprint for the routes and resources provided by invenio-config-tugraz."""
blueprint = Blueprint(
"invenio_config_tugraz",
__name__,
template_folder="templates",
)
@blueprint.before_app_first_request
def rank_higher():
"""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):
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):
temp = blueprints[security_index]
blueprints[security_index] = blueprints[our_index]
blueprints[our_index] = temp
return blueprint

View File

@@ -24,7 +24,7 @@ add_ignore = D401
directory = invenio_config_tugraz/translations/
[extract_messages]
copyright_holder = Mojib Wali
copyright_holder = Graz University of Technology
msgid_bugs_address = mojib.wali@tugraz.at
mapping-file = babel.ini
output-file = invenio_config_tugraz/translations/messages.pot

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2020 Mojib Wali.
# Copyright (C) 2020-2021 Graz University of Technology.
#
# 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
@@ -17,13 +17,18 @@ history = open("CHANGES.rst").read()
tests_require = [
"pytest-invenio>=1.4.0",
"SQLAlchemy-Utils>=0.33.1,<0.36",
"invenio-rdm-records~=0.20.8",
"invenio-search[elasticsearch7]>=1.4.0",
"psycopg2-binary>=2.8.6",
"invenio-app>=1.3.0,<2.0.0",
]
# Should follow invenio-app-rdm
invenio_search_version = ">=1.4.0,<1.5.0"
invenio_db_version = ">=1.0.9,<1.1.0"
extras_require = {
"elasticsearch7": [f"invenio-search[elasticsearch7]{invenio_search_version}"],
"mysql": [f"invenio-db[mysql,versioning]{invenio_db_version}"],
"postgresql": [f"invenio-db[postgresql,versioning]{invenio_db_version}"],
"sqlite": [f"invenio-db[versioning]{invenio_db_version}"],
"docs": [
"Sphinx>=3",
],
@@ -31,7 +36,14 @@ extras_require = {
}
extras_require["all"] = []
for reqs in extras_require.values():
for name, reqs in extras_require.items():
if name[0] == ":" or name in (
"elasticsearch7",
"mysql",
"postgresql",
"sqlite",
):
continue
extras_require["all"].extend(reqs)
setup_requires = [
@@ -41,8 +53,8 @@ setup_requires = [
install_requires = [
"Flask-BabelEx>=0.9.4",
"elasticsearch_dsl>=7.2.1",
"sqlalchemy-continuum>=1.3.11",
# keep this in sync with invenioRDM release
"invenio_app_rdm==3.0.0",
]
packages = find_packages()
@@ -72,6 +84,9 @@ setup(
"invenio_base.apps": [
"invenio_config_tugraz = invenio_config_tugraz:InvenioConfigTugraz",
],
"invenio_base.blueprints": [
"invenio_config_tugraz = invenio_config_tugraz.views:ui_blueprint",
],
"invenio_i18n.translations": [
"messages = invenio_config_tugraz",
],

View File

@@ -8,9 +8,9 @@
"""Test Generators."""
from invenio_access.permissions import any_user, authenticated_user
from invenio_access.permissions import any_user
from invenio_config_tugraz.generators import AuthenticatedUser, RecordIp
from invenio_config_tugraz.generators import RecordIp
def test_recordip(create_app, open_record, singleip_record):
@@ -27,12 +27,3 @@ def test_recordip(create_app, open_record, singleip_record):
assert generator.excludes(record=open_record) == []
assert generator.query_filter().to_dict() == {'bool': {'must_not': [{'match': {'access.access_right': 'singleip'}}]}}
def test_authenticateduser():
"""Test Generator AuthenticatedUser."""
generator = AuthenticatedUser()
assert generator.needs() == [authenticated_user]
assert generator.excludes() == []
assert generator.query_filter() == []