Compare commits

..

25 Commits

Author SHA1 Message Date
Christoph Ladurner
40a47ed36d release v0.11.0 2023-04-20 22:23:20 +02:00
mojib
129b331603 global: make package compatible with v11 2023-04-20 22:22:23 +02:00
Christoph Ladurner
328abd1306 release v0.10.4 2023-02-10 10:41:27 +01:00
Christoph Ladurner
7ce124cdb9 setup: invenio-search is not optional 2023-02-10 10:36:44 +01:00
Christoph Ladurner
75d78cf09a setup: change to reusable github workflows
* move check_manifest configuration to setup.cfg

* remove upper constraint for pytest-black
2023-02-10 10:36:44 +01:00
Christoph Ladurner
2e5fbcb4f9 setup: remove 3.7 and add 3.10 support 2023-02-10 10:36:44 +01:00
Christoph Ladurner
4c4279965a guide: update 2023-02-10 10:36:44 +01:00
Christoph Ladurner
0ee0df4ee1 release v0.10.2 2023-02-02 09:03:42 +01:00
mojib
8df08c09bf change version name 2023-02-01 15:36:57 +01:00
mojib
3a508ac3f0 footer: update guid 2023-02-01 15:36:57 +01:00
Christoph Ladurner
087cafa3ae release v0.10.1 2022-11-17 10:00:20 +01:00
Christoph Ladurner
14e9e0557a global: add function
* this function was moved from invenio-alma
2022-11-17 09:55:56 +01:00
Mojib Wali
8669f5dcda release: v0.10.0 2022-10-13 11:23:15 +02:00
Mojib Wali
62256b346f global: migrate to v10 2022-10-13 11:12:14 +02:00
Mojib Wali
4a8b02ec4a release: v0.9.1 2022-05-30 14:18:33 +02:00
Mojib Wali
8a592e3fdf ci(publish): ping babel version (#99) 2022-05-30 14:11:36 +02:00
Mojib Wali
42d5e2db05 release: v0.9.0 2022-05-30 13:38:10 +02:00
Mojib Wali
3db870784b config: adds accounts config var 2022-05-30 13:28:34 +02:00
Mojib Wali
73bc8b4575 dep: compatible to v9 rdm
black: formated
2022-05-25 18:49:16 +02:00
David
7fd5a7df3f config: add deposit form quota variable (#91) 2022-05-25 18:39:32 +02:00
Christoph Ladurner
79fe24511a bump invenio-rdm-records version 2022-05-25 12:46:45 +02:00
Christoph Ladurner
5b7a1718fc migrate setup py to cfg (#94)
* global: migrate setup.py to setup.cfg

* global: clean up copyright notices and tests

* migrate to use black as opinionated auto formater

* add .git-blame-ignore-revs
2022-05-12 08:58:50 +02:00
David
9192107e99 fix: update email welcome template with SITE_UI_URL (#93) 2022-04-20 08:31:42 +02:00
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
26 changed files with 289 additions and 371 deletions

View File

@@ -15,15 +15,6 @@ insert_final_newline = true
trim_trailing_whitespace = true trim_trailing_whitespace = true
charset = utf-8 charset = utf-8
# Python files
[*.py]
indent_size = 4
# isort plugin configuration
known_first_party = invenio_config_tugraz
multi_line_output = 2
default_section = THIRDPARTY
skip = .eggs
# RST files (used by sphinx) # RST files (used by sphinx)
[*.rst] [*.rst]
indent_size = 4 indent_size = 4

1
.git-blame-ignore-revs Normal file
View File

@@ -0,0 +1 @@
766b2cafae4dc74393b103389e6978eca5a9cfd2

View File

@@ -5,22 +5,5 @@ on:
jobs: jobs:
build-n-publish: build-n-publish:
runs-on: ubuntu-latest uses: tu-graz-library/.github/.github/workflows/pypi-publish.yml@main
steps: secrets: inherit
- uses: actions/checkout@v2
- name: Set up Python 3.7
uses: actions/setup-python@v2
with:
python-version: 3.7
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install setuptools wheel
- name: Build package
run: |
python setup.py compile_catalog sdist bdist_wheel
- name: pypi-publish
uses: pypa/gh-action-pypi-publish@v1.3.1
with:
user: __token__
password: ${{ secrets.pypi_password }}

View File

@@ -16,72 +16,5 @@ on:
default: 'Manual trigger' default: 'Manual trigger'
jobs: jobs:
Tests: tests:
runs-on: ubuntu-20.04 uses: tu-graz-library/.github/.github/workflows/tests.yml@main
strategy:
matrix:
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
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Generate dependencies
run: |
python -m pip install --upgrade pip setuptools py wheel requirements-builder
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:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('.${{ matrix.requirements-level }}-${{ matrix.python-version }}-requirements.txt') }}
- name: Install dependencies
run: |
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

View File

@@ -7,6 +7,47 @@
Changes Changes
======= =======
Version v0.11.0 (release 2023-04-20)
- global: make package compatible with v11
Version v0.10.4 (release 2023-02-10)
Version v0.10.2 (release 2023-02-02)
- change version name
- footer: update guid
Version v0.10.1 (release 2022-11-17)
- global: add function
Version 0.10.0 (released 2022-10-13)
- global: migrate to v10 (#101)
Version 0.9.1 (released 2022-05-30)
- ci(publish): ping babel version (#99)
Version 0.9.0 (released 2022-05-30)
- config: adds new introduced configs v9
- dep: compatible to v9 rdm
- config: add deposit form quota variable (#91)
- migrate setup py to cfg (#94)
- fix: update email welcome template with SITE_UI_URL (#93)
Version 0.8.4 (released 2022-03-11)
- config: use gettext
Version 0.8.3 (released 2022-03-10) Version 0.8.3 (released 2022-03-10)
- config: fix comment & import - config: fix comment & import

View File

@@ -52,3 +52,4 @@ recursive-include invenio_config_tugraz *.csv
# added by check-manifest # added by check-manifest
recursive-include invenio_config_tugraz *.pdf recursive-include invenio_config_tugraz *.pdf
include .git-blame-ignore-revs

View File

@@ -15,7 +15,6 @@ encoding = utf-8
[jinja2: **/templates/**.*] [jinja2: **/templates/**.*]
encoding = utf-8 encoding = utf-8
extensions = jinja2.ext.autoescape, jinja2.ext.with_
# Extraction from JavaScript files # Extraction from JavaScript files

View File

@@ -8,7 +8,7 @@
"""Sphinx configuration.""" """Sphinx configuration."""
import os from invenio_config_tugraz import __version__
# import sphinx.environment # import sphinx.environment
@@ -46,9 +46,9 @@ source_suffix = ".rst"
master_doc = "index" master_doc = "index"
# General information about the project. # General information about the project.
project = u"invenio-config-tugraz" project = "invenio-config-tugraz"
copyright = u"2020, Mojib Wali" copyright = "2022, TU Graz"
author = u"Mojib Wali" author = "TU Graz"
# The version info for the project you're documenting, acts as replacement for # The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the # |version| and |release|, also used in various other places throughout the
@@ -56,26 +56,15 @@ author = u"Mojib Wali"
# #
# The short X.Y version. # The short X.Y version.
# Get the version string. Cannot be done with import!
g = {}
with open(
os.path.join(
os.path.dirname(__file__), "..", "invenio_config_tugraz", "version.py"
),
"rt",
) as fp:
exec(fp.read(), g)
version = g["__version__"]
# The full version, including alpha/beta/rc tags. # The full version, including alpha/beta/rc tags.
release = version release = __version__
# The language for content autogenerated by Sphinx. Refer to documentation # The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages. # for a list of supported languages.
# #
# This is also used if you do content translation via gettext catalogs. # This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases. # Usually you set "language" from the command line for these cases.
language = None language = "en"
# There are two options for replacing |today|: either, you set today to some # There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used: # non-false value, then it is used:
@@ -254,8 +243,8 @@ latex_documents = [
( (
master_doc, master_doc,
"invenio-config-tugraz.tex", "invenio-config-tugraz.tex",
u"invenio-config-tugraz Documentation", "invenio-config-tugraz Documentation",
u"Mojib Wali", "Mojib Wali",
"manual", "manual",
), ),
] ]
@@ -289,7 +278,7 @@ man_pages = [
( (
master_doc, master_doc,
"invenio-config-tugraz", "invenio-config-tugraz",
u"invenio-config-tugraz Documentation", "invenio-config-tugraz Documentation",
[author], [author],
1, 1,
) )
@@ -308,7 +297,7 @@ texinfo_documents = [
( (
master_doc, master_doc,
"invenio-config-tugraz", "invenio-config-tugraz",
u"invenio-config-tugraz Documentation", "invenio-config-tugraz Documentation",
author, author,
"invenio-config-tugraz", "invenio-config-tugraz",
"invenio module that adds tugraz configs.", "invenio module that adds tugraz configs.",
@@ -332,8 +321,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), "flask": ("https://flask.palletsprojects.com/", None),
'werkzeug': ('https://werkzeug.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

@@ -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
@@ -10,6 +10,13 @@
from .ext import InvenioConfigTugraz from .ext import InvenioConfigTugraz
from .generators import RecordIp from .generators import RecordIp
from .version import __version__ from .utils import get_identity_from_user_by_email
__all__ = ("__version__", "InvenioConfigTugraz", "RecordIp") __version__ = "0.11.0"
__all__ = (
"__version__",
"InvenioConfigTugraz",
"RecordIp",
"get_identity_from_user_by_email",
)

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# Copyright (C) 2020-2021 Graz University of Technology. # 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
@@ -8,9 +8,7 @@
"""invenio module that adds tugraz configs.""" """invenio module that adds tugraz configs."""
from os.path import abspath, dirname, join from flask_babelex import gettext as _
from flask_babelex import lazy_gettext as _
INVENIO_CONFIG_TUGRAZ_SHIBBOLETH = False INVENIO_CONFIG_TUGRAZ_SHIBBOLETH = False
"""Set True if SAML is configured""" """Set True if SAML is configured"""
@@ -180,6 +178,9 @@ SECURITY_CONFIRMABLE = False
Instead user will get a welcome email. Instead user will get a welcome email.
""" """
SECURITY_LOGIN_WITHOUT_CONFIRMATION = False
"""Require users to confirm email before being able to login."""
# Flask-Security # Flask-Security
# ============= # =============
# See https://pythonhosted.org/Flask-Security/configuration.html # See https://pythonhosted.org/Flask-Security/configuration.html
@@ -260,7 +261,7 @@ 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' APP_RDM_DEPOSIT_FORM_AUTOCOMPLETE_NAMES = "off"
"""Behavior for autocomplete names search field for creators/contributors. """Behavior for autocomplete names search field for creators/contributors.
Available options: Available options:
@@ -271,6 +272,17 @@ Available options:
- ``off``: Only show person form (no search field). - ``off``: Only show person form (no search field).
""" """
APP_RDM_DEPOSIT_FORM_QUOTA = {
"maxFiles": 100,
# Easiest way to set this to a certain amount is to start from 1 Gb
# and go from there:
# 1 Gb: 10 ** 9
# 50 Gb: 10 ** 9 * 50
# 100 Mb: 10 ** 9 * 0.1
"maxStorage": 10**9 * 10,
}
"""Deposit file upload quota """
SQLALCHEMY_ECHO = False SQLALCHEMY_ECHO = False
"""Enable to see all SQL queries.""" """Enable to see all SQL queries."""
@@ -342,7 +354,7 @@ RATELIMIT_AUTHENTICATED_USER = "25000 per hour;1000 per minute"
RATELIMIT_GUEST_USER = "5000 per hour;500 per minute" RATELIMIT_GUEST_USER = "5000 per hour;500 per minute"
"""Increase defaults for guest users.""" """Increase defaults for guest users."""
SESSION_COOKIE_SAMESITE = 'Strict' SESSION_COOKIE_SAMESITE = "Strict"
"""Sets cookie with the samesite flag to 'Strict' by default.""" """Sets cookie with the samesite flag to 'Strict' by default."""
@@ -354,7 +366,7 @@ OAISERVER_ID_PREFIX = "repository.tugraz.at"
"""The prefix that will be applied to the generated OAI-PMH ids.""" """The prefix that will be applied to the generated OAI-PMH ids."""
OAISERVER_ADMIN_EMAILS = [ OAISERVER_ADMIN_EMAILS = [
'oai@repository.tugraz.at', "oai@repository.tugraz.at",
] ]
"""The e-mail addresses of administrators of the repository. """The e-mail addresses of administrators of the repository.

View File

@@ -1,14 +1,12 @@
# -*- 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
# details. # details.
"""invenio module that adds tugraz configs.""" """invenio module that adds tugraz configs."""
from flask import Blueprint
from . import config from . import config

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# Copyright (C) 2020-2021 Graz University of Technology. # 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
@@ -151,10 +151,10 @@ The succinct encoding of the permissions for your instance gives you
- great flexibility by defining your own actions, generators and policies - great flexibility by defining your own actions, generators and policies
""" """
from elasticsearch_dsl.query import Q
from flask import current_app, request from flask import current_app, request
from invenio_access.permissions import any_user, superuser_access from invenio_access.permissions import any_user
from invenio_records_permissions.generators import Generator from invenio_records_permissions.generators import Generator
from invenio_search.engine import dsl
class RecordIp(Generator): class RecordIp(Generator):
@@ -208,10 +208,10 @@ class RecordIp(Generator):
if not visible: if not visible:
# If user ip is not on the list, and If the record contains 'singleip' will not be seen # If user ip is not on the list, and If the record contains 'singleip' will not be seen
return ~Q("match", **{"access.access_right": "singleip"}) return ~dsl.Q("match", **{"access.access_right": "singleip"})
# Lists all records # Lists all records
return Q("match_all") return dsl.Q("match_all")
def check_permission(self): def check_permission(self):
"""Check for User IP address in config variable.""" """Check for User IP address in config variable."""

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_config_tugraz.guide') }}) - {{ _('Guidelines:')}} {{ _('Repository Guide')}} ({{ _('how to upload files')}}) ({{ config.SITE_UI_URL }}{{ url_for('invenio_config_tugraz.guide') }})
- {{ _('Search Guide')}} (https://{{ config.SITE_HOSTNAME }}{{url_for('invenio_app_rdm.help_search')}}) - {{ _('Search Guide')}} ({{ config.SITE_UI_URL }}{{url_for('invenio_app_rdm.help_search')}})
- {{ _('Terms And Conditions') }} (https://{{ config.SITE_HOSTNAME }}{{ url_for('invenio_config_tugraz.terms') }}) - {{ _('Terms And Conditions') }} ({{ config.SITE_UI_URL }}{{ url_for('invenio_config_tugraz.terms') }})
- {{ _('Data Protection Rights')}} (https://{{ config.SITE_HOSTNAME }}{{ url_for('invenio_config_tugraz.gdpr') }}) - {{ _('Data Protection Rights')}} ({{ config.SITE_UI_URL }}{{ 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

@@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2022 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.
"""Utils file."""
from flask_principal import Identity
from invenio_access import any_user
from invenio_access.utils import get_identity
from invenio_accounts import current_accounts
def get_identity_from_user_by_email(email: str = None) -> Identity:
"""Get the user specified via email or ID."""
if email is None:
raise ValueError("the email has to be set to get a identity")
user = current_accounts.datastore.get_user(email)
if user is None:
raise LookupError(f"user with {email} not found")
identity = get_identity(user)
# TODO: this is a temporary solution. this should be done with data from the db
identity.provides.add(any_user)
return identity

View File

@@ -1,15 +0,0 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2020-2022 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.
"""Version information for invenio-config-tugraz.
This file is imported by ``invenio_config_tugraz.__init__``,
and parsed by ``setup.py``.
"""
__version__ = "0.8.3"

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# Copyright (C) 2020-2021 Graz University of Technology. # 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
@@ -8,10 +8,6 @@
"""invenio module for TUGRAZ config.""" """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, redirect, url_for from flask import Blueprint, current_app, redirect, url_for
from flask_babelex import get_locale from flask_babelex import get_locale
@@ -52,22 +48,34 @@ def ui_blueprint(app):
def guide(): def guide():
"""TUGraz_Repository_Guide.""" """TUGraz_Repository_Guide."""
locale = get_locale() locale = get_locale()
return redirect(url_for('static', return redirect(
filename=f'documents/TUGraz_Repository_Guide_02_{locale}.pdf', url_for(
_external=True)) "static",
filename=f"documents/TUGraz_Repository_Guide_02.1_{locale}.pdf",
_external=True,
)
)
def terms(): def terms():
"""Terms_And_Conditions.""" """Terms_And_Conditions."""
locale = get_locale() locale = get_locale()
return redirect(url_for('static', return redirect(
filename=f'documents/TUGraz_Repository_Terms_And_Conditions_{locale}.pdf', url_for(
_external=True)) "static",
filename=f"documents/TUGraz_Repository_Terms_And_Conditions_{locale}.pdf",
_external=True,
)
)
def gdpr(): def gdpr():
"""General_Data_Protection_Rights.""" """General_Data_Protection_Rights."""
locale = get_locale() locale = get_locale()
return redirect(url_for('static', return redirect(
filename=f'documents/TUGraz_Repository_General_Data_Protection_Rights_{locale}.pdf', url_for(
_external=True)) "static",
filename=f"documents/TUGraz_Repository_General_Data_Protection_Rights_{locale}.pdf",
_external=True,
)
)

3
pyproject.toml Normal file
View File

@@ -0,0 +1,3 @@
[build-system]
requires = ["setuptools", "wheel", "babel>2.8"]
build-backend = "setuptools.build_meta"

View File

@@ -1,12 +0,0 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2020 Mojib Wali.
#
# 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.
[pytest]
addopts = --isort --pydocstyle --pycodestyle --doctest-glob="*.rst" --doctest-modules --cov=invenio_config_tugraz --cov-report=term-missing tests invenio_config_tugraz
testpaths = tests invenio_config_tugraz
live_server_scope = module

View File

@@ -23,10 +23,9 @@ function cleanup() {
} }
trap cleanup EXIT trap cleanup EXIT
python -m check_manifest
python -m check_manifest --ignore ".*-requirements.txt"
python -m sphinx.cmd.build -qnN 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 --search ${SEARCH:-elasticsearch} --env)"
python -m pytest python -m pytest
tests_exit_code=$? tests_exit_code=$?
python -m sphinx.cmd.build -qnN -b doctest docs docs/_build/doctest python -m sphinx.cmd.build -qnN -b doctest docs docs/_build/doctest

View File

@@ -1,11 +1,63 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# Copyright (C) 2020 Mojib Wali. # Copyright (C) 2020-2023 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
# details. # details.
[metadata]
name = invenio-config-tugraz
version = attr: invenio_config_tugraz.__version__
description = "Invenio module that adds tugraz configs."
long_description = file: README.rst, CHANGES.rst
keywords = invenio config TU-Graz
license = MIT
author = "Graz University of Technology"
author_email = info@tugraz.at
platforms = any
url = https://github.com/tu-graz-library/invenio-config-tugraz
classifiers =
Environment :: Web Environment
Intended Audience :: Developers
License :: OSI Approved :: MIT License
Operating System :: OS Independent
Programming Language :: Python
Topic :: Internet :: WWW/HTTP :: Dynamic Content
Topic :: Software Development :: Libraries :: Python Modules
Programming Language :: Python :: 3.8
Programming Language :: Python :: 3.9
Programming Language :: Python :: 3.10
Development Status :: 3 - Alpha
[options]
include_package_data = True
packages = find:
python_requires = >=3.8
zip_safe = False
install_requires =
# keep this dependencies identical to invenio-app-rdm
invenio-rdm-records>=1.1.0,<2.0.0
invenio-cache>=1.1.1,<1.2.0
flask-babel>=2,<3
[options.extras_require]
tests =
pytest-black>=0.3.0
Sphinx>=4.5.0
pytest-invenio>=2.1.0,<3.0.0
invenio-search[opensearch2]>=2.1.0,<3.0.0
[options.entry_points]
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
invenio_config.module =
invenio_config_tugraz = invenio_config_tugraz.config
[aliases] [aliases]
test = pytest test = pytest
@@ -38,19 +90,14 @@ output-dir = invenio_config_tugraz/translations/
input-file = invenio_config_tugraz/translations/messages.pot input-file = invenio_config_tugraz/translations/messages.pot
output-dir = invenio_config_tugraz/translations/ output-dir = invenio_config_tugraz/translations/
[flake8]
max-line-length = 88
extend-ignore = E203
select = C,E,F,W,B,B950
ignore = E501
[isort] [isort]
multi_line_output = 3 profile=black
include_trailing_comma = True
force_grid_wrap = 0
use_parentheses = True
ensure_newline_before_comments = True
line_length = 88
[pycodestyle] [check-manifest]
ignore = E203,E501 ignore =
*-requirements.txt
[tool:pytest]
addopts = --black --isort --pydocstyle --doctest-glob="*.rst" --doctest-modules --cov=invenio_config_tugraz --cov-report=term-missing tests invenio_config_tugraz
testpaths = tests invenio_config_tugraz
live_server_scope = module

107
setup.py
View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# Copyright (C) 2020-2021 Graz University of Technology. # 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
@@ -8,107 +8,6 @@
"""invenio module that adds tugraz configs.""" """invenio module that adds tugraz configs."""
import os from setuptools import setup
from setuptools import find_packages, setup setup()
readme = open("README.rst").read()
history = open("CHANGES.rst").read()
tests_require = [
"pytest-invenio>=1.4.1",
]
# Should follow invenio-app-rdm
invenio_search_version = ">=1.4.2,<1.5.0"
invenio_db_version = ">=1.0.11,<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==4.2.0",
],
"tests": tests_require,
}
extras_require["all"] = []
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 = [
"Babel>=2.8,<3",
]
install_requires = [
# keep this in sync with invenioRDM release
"invenio-rdm-records>=0.34.5,<0.35.0",
"invenio-cache>=1.1.0"
]
packages = find_packages()
# Get the version string. Cannot be done with import!
g = {}
with open(os.path.join("invenio_config_tugraz", "version.py"), "rt") as fp:
exec(fp.read(), g)
version = g["__version__"]
setup(
name="invenio-config-tugraz",
version=version,
description=__doc__,
long_description=readme + "\n\n" + history,
keywords="invenio, config, Tu Graz",
license="MIT",
author="Mojib Wali",
author_email="mb_wali@hotmail.com",
url="https://github.com/tu-graz-library/invenio-config-tugraz",
packages=packages,
zip_safe=False,
include_package_data=True,
platforms="any",
entry_points={
"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",
],
"invenio_config.module": [
"invenio_config_tugraz = invenio_config_tugraz.config",
],
},
extras_require=extras_require,
install_requires=install_requires,
setup_requires=setup_requires,
tests_require=tests_require,
classifiers=[
"Environment :: Web Environment",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Topic :: Internet :: WWW/HTTP :: Dynamic Content",
"Topic :: Software Development :: Libraries :: Python Modules",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Development Status :: 5 - Production/Stable",
],
)

View File

@@ -73,7 +73,7 @@ def create_app(request):
return app return app
@pytest.fixture(scope='function') @pytest.fixture(scope="function")
def open_record(): def open_record():
"""Open record data as dict coming from the external world.""" """Open record data as dict coming from the external world."""
return { return {
@@ -81,44 +81,44 @@ def open_record():
"metadata": False, "metadata": False,
"files": False, "files": False,
"owned_by": [1], "owned_by": [1],
"access_right": "open" "access_right": "open",
}, },
"metadata": { "metadata": {
"publication_date": "2020-06-01", "publication_date": "2020-06-01",
"resource_type": { "resource_type": {"type": "image", "subtype": "image-photo"},
"type": "image",
"subtype": "image-photo"
},
# Technically not required # Technically not required
"creators": [{ "creators": [
"name": "Troy Brown", {"name": "Troy Brown", "type": "personal"},
"type": "personal" {
}, {
"name": "Phillip Lester", "name": "Phillip Lester",
"type": "personal", "type": "personal",
"identifiers": {"orcid": "0000-0002-1825-0097"}, "identifiers": {"orcid": "0000-0002-1825-0097"},
"affiliations": [{ "affiliations": [
"name": "Carter-Morris", {"name": "Carter-Morris", "identifiers": {"ror": "03yrm5c26"}}
"identifiers": {"ror": "03yrm5c26"} ],
}] },
}, { {
"name": "Steven Williamson", "name": "Steven Williamson",
"type": "personal", "type": "personal",
"identifiers": {"orcid": "0000-0002-1825-0097"}, "identifiers": {"orcid": "0000-0002-1825-0097"},
"affiliations": [{ "affiliations": [
{
"name": "Ritter and Sons", "name": "Ritter and Sons",
"identifiers": {"ror": "03yrm5c26"} "identifiers": {"ror": "03yrm5c26"},
}, { },
{
"name": "Montgomery, Bush and Madden", "name": "Montgomery, Bush and Madden",
"identifiers": {"ror": "03yrm5c26"} "identifiers": {"ror": "03yrm5c26"},
}] },
}], ],
"title": "A Romans story" },
} ],
"title": "A Romans story",
},
} }
@pytest.fixture(scope='function') @pytest.fixture(scope="function")
def singleip_record(): def singleip_record():
"""Single Ip record data as dict coming from the external world.""" """Single Ip record data as dict coming from the external world."""
return { return {
@@ -126,38 +126,38 @@ def singleip_record():
"metadata": False, "metadata": False,
"files": False, "files": False,
"owned_by": [1], "owned_by": [1],
"access_right": "singleip" "access_right": "singleip",
}, },
"metadata": { "metadata": {
"publication_date": "2020-06-01", "publication_date": "2020-06-01",
"resource_type": { "resource_type": {"type": "image", "subtype": "image-photo"},
"type": "image",
"subtype": "image-photo"
},
# Technically not required # Technically not required
"creators": [{ "creators": [
"name": "Troy Brown", {"name": "Troy Brown", "type": "personal"},
"type": "personal" {
}, {
"name": "Phillip Lester", "name": "Phillip Lester",
"type": "personal", "type": "personal",
"identifiers": {"orcid": "0000-0002-1825-0097"}, "identifiers": {"orcid": "0000-0002-1825-0097"},
"affiliations": [{ "affiliations": [
"name": "Carter-Morris", {"name": "Carter-Morris", "identifiers": {"ror": "03yrm5c26"}}
"identifiers": {"ror": "03yrm5c26"} ],
}] },
}, { {
"name": "Steven Williamson", "name": "Steven Williamson",
"type": "personal", "type": "personal",
"identifiers": {"orcid": "0000-0002-1825-0097"}, "identifiers": {"orcid": "0000-0002-1825-0097"},
"affiliations": [{ "affiliations": [
{
"name": "Ritter and Sons", "name": "Ritter and Sons",
"identifiers": {"ror": "03yrm5c26"} "identifiers": {"ror": "03yrm5c26"},
}, { },
{
"name": "Montgomery, Bush and Madden", "name": "Montgomery, Bush and Madden",
"identifiers": {"ror": "03yrm5c26"} "identifiers": {"ror": "03yrm5c26"},
}] },
}], ],
"title": "A Romans story" },
} ],
"title": "A Romans story",
},
} }

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
@@ -26,4 +26,6 @@ def test_recordip(create_app, open_record, singleip_record):
assert generator.excludes(record=open_record) == [] assert generator.excludes(record=open_record) == []
assert generator.excludes(record=open_record) == [] assert generator.excludes(record=open_record) == []
assert generator.query_filter().to_dict() == {'bool': {'must_not': [{'match': {'access.access_right': 'singleip'}}]}} assert generator.query_filter().to_dict() == {
"bool": {"must_not": [{"match": {"access.access_right": "singleip"}}]}
}

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