Compare commits

...

58 Commits

Author SHA1 Message Date
529fe17d24 Patch to improve uv publishing 2025-05-23 12:57:52 +01:00
0fd2466b49 Another attempt to patch publish workflow 2025-05-23 12:45:29 +01:00
8f5c1e36a5 Attempt to patch publishing workflow 2025-05-23 12:39:16 +01:00
1992a4cee0 Version Increment 2025-05-23 12:36:23 +01:00
40ed1aa4f9 Set publish to trigger on tagging 2025-05-23 12:35:57 +01:00
51f11bd910 Added automatic publishing to pypi 2025-05-23 12:31:16 +01:00
f4c8cbea03 Fixed mistake in tagging workflow 2025-05-23 12:19:25 +01:00
56f7739ae4 Tweaked tagging workflow to only run after successful tests 2025-05-23 12:18:12 +01:00
f2bcb03cd0 Version increment 2025-05-23 12:14:00 +01:00
9646985e7c AddedAdded auto-tagging workflow 2025-05-23 12:11:58 +01:00
b514df9d48 Updated tests workflow 2025-05-23 12:11:58 +01:00
e1d975dc98 Version increment 2025-05-20 11:22:01 +01:00
d4f6efe5a2 Removed unnecessary git hook 2025-05-20 11:21:52 +01:00
9b7aa9a217 Improved check_version_increment script 2025-05-20 11:19:10 +01:00
a0da4cf05f Added version check script and pre-push hooks 2025-05-20 10:10:47 +01:00
84595fa54f Switched to calver managed by hatch 2025-05-20 10:01:19 +01:00
2cf44242fa Update devenv 2025-05-08 14:35:52 +01:00
899b391e29 Version bump 2025-05-02 14:05:20 +01:00
610ea83652 Re-added entrypoints 2025-05-02 13:52:53 +01:00
28aa1eb9a3 Updated to run on python 3.13 2025-05-01 09:02:07 +01:00
98f37fc6d7 Added license header 2025-04-29 14:35:26 +01:00
7c938751e6 Version bump 2025-04-29 14:12:54 +01:00
7bd474a247 Fixed testing workflow 2025-04-29 14:05:50 +01:00
8582c8ce23 Switched tests to be managed by package manager 2025-04-29 14:03:16 +01:00
3ba2169591 Fixed policies 2025-04-29 13:29:06 +01:00
3e566699c6 Updated test settings 2025-04-29 12:49:31 +01:00
811bf6514d Renamed test file 2025-04-29 12:15:48 +01:00
668ae1e34c Switched build system from setuptools to hatchling 2025-04-29 12:13:57 +01:00
60085e90ab Removed deprecated ruff rules 2025-04-29 08:48:05 +01:00
cb836a1d6d Updated devenv 2025-04-29 08:43:20 +01:00
5fea611ab4 Added act to test actions locally 2025-04-29 08:42:09 +01:00
e8df1e4541 Removed manifest from package 2025-04-28 18:50:42 +01:00
069bb11033 Added test script logging 2025-04-28 18:45:20 +01:00
cd35917894 UV tests fix? 2025-04-28 18:39:51 +01:00
302ff471fd Trying again 2025-04-28 18:36:53 +01:00
e2e6a32c08 Another fix attempt 2025-04-28 18:34:15 +01:00
32f0c0af61 Another fix attempt 2025-04-28 18:27:49 +01:00
d26e8cae6f Another tests.yml fix 2025-04-28 18:26:14 +01:00
f537f0e383 Attempted tests.yml fix 2025-04-28 18:13:31 +01:00
3e82144fd3 Another attempt to fix tests.yml 2025-04-28 18:12:18 +01:00
b925eaa678 Fixed tests workflow 2025-04-28 18:08:04 +01:00
5b2eb94994 FIxed tests workflow and removed automatic publishing 2025-04-28 18:01:35 +01:00
7c7a281a5f Configured for build and publish 2025-04-28 17:51:28 +01:00
8e3b48ab52 Added devenv definition 2025-04-28 17:51:28 +01:00
Cian Hughes
8746d704a1 Update pypi-publish.yml 2025-04-25 16:52:25 +01:00
Cian Hughes
a7b474bb78 Update tests.yml 2025-04-25 16:50:18 +01:00
969b16fe4a Updated README.rst 2025-04-25 16:43:07 +01:00
d452fca79e Update README.rst 2025-04-25 16:40:41 +01:00
2069f0826d Updated README.rst 2025-04-25 16:29:06 +01:00
98893598f8 Update README.rst 2025-04-25 16:26:59 +01:00
4e20d6a5fe Lint and format according to new codestyle 2025-04-25 16:24:31 +01:00
58a7e2f3a8 Switched from black to ruff 2025-04-25 16:22:11 +01:00
5665b01979 Migrate from setup.py to uv 2025-04-25 15:51:27 +01:00
b6cbd03f9c Changed names for new fork 2025-04-25 15:51:08 +01:00
Christoph Ladurner
04ca3f5661 release v0.12.5 2024-07-29 09:46:39 +02:00
Christoph Ladurner
5d84b08e26 fix: permission for ip 2024-07-29 09:36:36 +02:00
Christoph Ladurner
5e4fcca0ed release v0.12.3 2024-07-25 23:04:28 +02:00
Christoph Ladurner
c934a4952b fix(tugraz_authenticated): missmatch of role name 2024-07-25 23:04:01 +02:00
67 changed files with 6224 additions and 473 deletions

View File

@@ -2,7 +2,7 @@
#
# Copyright (C) 2020 Mojib Wali.
#
# invenio-config-tugraz is free software; you can redistribute it and/or
# invenio-config-iform is free software; you can redistribute it and/or
# modify it under the terms of the MIT License; see LICENSE file for more
# details.

5
.envrc Normal file
View File

@@ -0,0 +1,5 @@
export DIRENV_WARN_TIMEOUT=20s
eval "$(devenv direnvrc)"
use devenv

26
.github/workflows/publish.yml vendored Normal file
View File

@@ -0,0 +1,26 @@
name: Publish to PyPI
on:
workflow_run:
workflows:
- Auto Version Tag
types:
- completed
jobs:
publish:
runs-on: ubuntu-latest
environment: release
steps:
- uses: actions/checkout@v4
- name: Set up uv
uses: astral-sh/setup-uv@v6
with:
python-version: "${{ matrix.python-version }}"
enable-cache: true
cache-dependency-glob: |
pyproject.toml
- name: Build package
run: uv build
- name: Publish to PyPI
run: uv publish --token ${{ secrets.PYPI_API_TOKEN }}

View File

@@ -1,9 +0,0 @@
on:
push:
tags:
- v*
jobs:
build-n-publish:
uses: tu-graz-library/.github/.github/workflows/pypi-publish.yml@main
secrets: inherit

20
.github/workflows/tagging.yml vendored Normal file
View File

@@ -0,0 +1,20 @@
name: Auto Version Tag
on:
workflow_run:
workflows:
- Tests
types:
- completed
jobs:
tag:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Version tag
uses: Jorricks/action-python-autotagging@1.0.1
with:
token: ${{ secrets.GITHUB_TOKEN }}
path: invenio_config_iform/__about__.py
variable: __version__

View File

@@ -1,20 +1,86 @@
name: CI
# -*- coding: utf-8 -*-
#
# Copyright (C) 2025 I-Form Advanced Manufacturing Research Centre.
#
# invenio-theme-iform is free software; you can redistribute it and/or
# modify it under the terms of the MIT License; see LICENSE file for more
# details.
name: Tests
on:
push:
branches: master
branches:
- master
pull_request:
branches: master
schedule:
# * is a special character in YAML so you have to quote this string
- cron: '0 3 * * 6'
branches:
- master
workflow_dispatch:
inputs:
reason:
description: 'Reason'
description: "Reason"
required: false
default: 'Manual trigger'
default: "Manual trigger"
jobs:
create-strategy:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.requirements.outputs.matrix }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: requirements
id: requirements
run: |
# Define a simple matrix with your Python version
# Since we're using pyproject.toml with Python 3.12 requirement
echo "matrix={\"include\": [{\"python-version\": \"3.12\"}]}" >> $GITHUB_OUTPUT
# Print the matrix for debugging
echo "-------------------"
echo "Matrix: {\"include\": [{\"python-version\": \"3.12\"}]}"
echo "-------------------"
tests:
uses: tu-graz-library/.github/.github/workflows/tests.yml@main
needs: create-strategy
runs-on: ubuntu-latest
name: Test (Python ${{matrix.python-version}})
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.create-strategy.outputs.matrix) }}
# Simplified environment without service variables
env:
PYTHON_VERSION: ${{ matrix.python-version }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up uv
uses: astral-sh/setup-uv@v6
with:
python-version: "${{ matrix.python-version }}"
enable-cache: true
cache-dependency-glob: |
pyproject.toml
cache-suffix: ${{ matrix.python-version }}
- name: Show configuration
run: |
uv --version
uv run python --version
docker --version
docker ps
- name: Install dependencies
run: |
uv sync --group tests
- name: Run tests
run: |
uv run test

10
.gitignore vendored
View File

@@ -60,3 +60,13 @@ target/
# Vim swapfiles
.*.sw?
# Devenv
.devenv*
devenv.local.nix
# direnv
.direnv
# python version lock
.python-version

24
.pre-commit-config.yaml Normal file
View File

@@ -0,0 +1,24 @@
repos:
- repo: local
hooks:
- id: check-version-increment
name: Check Version Increment
entry: python scripts/hooks/pre-push/check_version_increment.py
language: system
pass_filenames: false
stages: [pre-push]
- id: tests
name: Run Python Tests
entry: uv run test
language: system
pass_filenames: false
stages: [pre-push]
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.11.9
hooks:
- id: ruff
stages: [pre-push]
- id: ruff-format
stages: [pre-push]

View File

@@ -1,13 +1,15 @@
..
Copyright (C) 2020 Mojib Wali.
invenio-config-tugraz is free software; you can redistribute it and/or
invenio-config-iform is free software; you can redistribute it and/or
modify it under the terms of the MIT License; see LICENSE file for more
details.
Authors
=======
invenio module that adds tugraz configs.
invenio module that adds I-Form configs.
- Mojib Wali <mojib.wali@tugraz.at>
- Cian Hughes <cian.hughes@dcu.ie>
Forked from https://github.com/tu-graz-library/invenio-theme-tugraz

View File

@@ -1,13 +1,23 @@
..
Copyright (C) 2020 - 2022 Graz University of Technology.
invenio-config-tugraz is free software; you can redistribute it and/or
invenio-config-iform is free software; you can redistribute it and/or
modify it under the terms of the MIT License; see LICENSE file for more
details.
Changes
=======
Version v0.12.5 (release 2024-07-29)
- fix: permission for ip
Version v0.12.3 (release 2024-07-25)
- fix(iform_authenticated): missmatch of role name
Version v0.12.2 (release 2024-07-19)
- setup: introduce ruff

View File

@@ -10,7 +10,7 @@ Types of Contributions
Report Bugs
~~~~~~~~~~~
Report bugs at https://github.com/tu-graz-library/invenio-config-tugraz/issues.
Report bugs at https://github.com/Cian-H/invenio-config-iform/issues.
If you are reporting a bug, please include:
@@ -33,15 +33,15 @@ is open to whoever wants to implement it.
Write Documentation
~~~~~~~~~~~~~~~~~~~
invenio-config-tugraz could always use more documentation, whether as part of the
official invenio-config-tugraz docs, in docstrings, or even on the web in blog posts,
invenio-config-iform could always use more documentation, whether as part of the
official invenio-config-iform docs, in docstrings, or even on the web in blog posts,
articles, and such.
Submit Feedback
~~~~~~~~~~~~~~~
The best way to send feedback is to file an issue at
https://github.com/tu-graz-library/invenio-config-tugraz/issues.
https://github.com/Cian-H/invenio-config-iform/issues.
If you are proposing a feature:
@@ -53,14 +53,14 @@ If you are proposing a feature:
Get Started!
------------
Ready to contribute? Here's how to set up `invenio-config-tugraz` for local development.
Ready to contribute? Here's how to set up `invenio-config-iform` for local development.
1. Fork the `https://github.com/https://github.com/mb-` repo on GitHub.
2. Clone your fork locally:
.. code-block:: console
$ git clone git@github.com:your_name_here/invenio-config-tugraz.git
$ git clone git@github.com:your_name_here/invenio-config-iform.git
3. Install your local copy into a virtualenv. Assuming you have
virtualenvwrapper installed, this is how you set up your fork for local
@@ -68,8 +68,8 @@ Ready to contribute? Here's how to set up `invenio-config-tugraz` for local deve
.. code-block:: console
$ mkvirtualenv invenio-config-tugraz
$ cd invenio-config-tugraz/
$ mkvirtualenv invenio-config-iform
$ cd invenio-config-iform/
$ pip install -e .[all]
4. Create a branch for local development:
@@ -114,5 +114,5 @@ Before you submit a pull request, check that it meets these guidelines:
2. If the pull request adds functionality, the docs should be updated. Put
your new functionality into a function with a docstring.
3. The pull request should work for Python 3.6 and 3.7. Check
https://github.com/github/tu-graz-library/invenio-config-tugraz//actions?query=event%3Apull_request
https://github.com/github/Cian-H/invenio-config-iform//actions?query=event%3Apull_request
and make sure that the tests pass for all supported Python versions.

View File

@@ -1,8 +1,8 @@
Installation
============
invenio-config-tugraz is on PyPI so all you need is:
invenio-config-iform is on PyPI so all you need is:
.. code-block:: console
$ pip install invenio-config-tugraz
$ pip install invenio-config-iform

View File

@@ -1,55 +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.
# TODO: Generate this manifest file by running the following commands:
# (please sort the lines in this file after running below commands)
#
# git init
# git add -A
# pip install -e .[all]
# check-manifest -u
include .dockerignore
include .editorconfig
include .tx/config
prune docs/_build
recursive-include invenio_config_tugraz/translations *.po *.pot *.mo
# added by check_manifest.py
include *.md
include *.rst
include *.sh
include *.txt
include *.rst
include LICENSE
include babel.ini
include pytest.ini
recursive-include docs *.bat
recursive-include docs *.py
recursive-include docs *.rst
recursive-include docs *.txt
recursive-include docs Makefile
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
# added by check-manifest
recursive-include invenio_config_tugraz *.pdf
include .git-blame-ignore-revs

View File

@@ -1,45 +1,47 @@
..
Copyright (C) 2020-2021 Graz University of Technology.
invenio-config-tugraz is free software; you can redistribute it and/or
invenio-config-iform 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-config-tugraz
invenio-config-iform
=======================
.. image:: https://github.com/tu-graz-library/invenio-config-tugraz/workflows/CI/badge.svg
:target: https://github.com/tu-graz-library/invenio-config-tugraz/actions
.. image:: https://github.com/Cian-H/invenio-config-iform/workflows/CI/badge.svg
:target: https://github.com/Cian-H/invenio-config-iform/actions
.. 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/pypi/dm/invenio-config-iform.svg
:target: https://pypi.python.org/pypi/invenio-config-iform
.. image:: https://img.shields.io/github/tag/tu-graz-library/invenio-config-tugraz.svg
:target: https://github.com/tu-graz-library/invenio-config-tugraz/releases
.. image:: https://img.shields.io/github/tag/Cian-H/invenio-config-iform.svg
:target: https://github.com/Cian-H/invenio-config-iform/releases
.. image:: https://img.shields.io/github/license/tu-graz-library/invenio-config-tugraz.svg
:target: https://github.com/tu-graz-library/invenio-config-tugraz/blob/master/LICENSE
.. image:: https://img.shields.io/github/license/Cian-H/invenio-config-iform.svg
:target: https://github.com/Cian-H/invenio-config-iform/blob/master/LICENSE
.. image:: https://readthedocs.org/projects/invenio-config-tugraz/badge/?version=latest
:target: https://invenio-config-tugraz.readthedocs.io/en/latest/?badge=latest
.. image:: https://img.shields.io/coveralls/mb-wali/invenio-config-tugraz.svg
:target: https://coveralls.io/r/mb-wali/invenio-config-tugraz
.. image:: https://readthedocs.org/projects/invenio-config-iform/badge/?version=latest
:target: https://invenio-config-iform.readthedocs.io/en/latest/?badge=latest
.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
:target: https://github.com/psf/black
.. image:: https://img.shields.io/coveralls/mb-wali/invenio-config-iform.svg
:target: https://coveralls.io/r/mb-wali/invenio-config-iform
invenio module that adds tugraz configs.
.. image:: https://img.shields.io/badge/code%20style-Ruff-D7FF64.svg
:target: https://github.com/astral-sh/ruff
Override configs from diffrent invenio modules to meet TU Graz requirement:
invenio module that adds I-Form configs.
Override configs from invenio modules with I-Form configurations:
* Invenio-App
* Invenio-Mail
* Invenio-shibboleth
* Invenio-accounts
* Flask-security
* Defined routes for TUG
* Defined routes for I-Form
Further documentation is available on
https://invenio-config-tugraz.readthedocs.io/
https://invenio-config-iform.readthedocs.io/
Forked from https://github.com/tu-graz-library/invenio-config-tugraz

View File

@@ -2,7 +2,7 @@
#
# Copyright (C) 2020 Mojib Wali.
#
# invenio-config-tugraz is free software; you can redistribute it and/or
# invenio-config-iform is free software; you can redistribute it and/or
# modify it under the terms of the MIT License; see LICENSE file for more
# details.

103
devenv.lock Normal file
View File

@@ -0,0 +1,103 @@
{
"nodes": {
"devenv": {
"locked": {
"dir": "src/modules",
"lastModified": 1746707904,
"owner": "cachix",
"repo": "devenv",
"rev": "fada79d97f2066c444766d039b0a62affd3e3cab",
"type": "github"
},
"original": {
"dir": "src/modules",
"owner": "cachix",
"repo": "devenv",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1733328505,
"owner": "edolstra",
"repo": "flake-compat",
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"git-hooks": {
"inputs": {
"flake-compat": "flake-compat",
"gitignore": "gitignore",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1746537231,
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "fa466640195d38ec97cf0493d6d6882bc4d14969",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1745934659,
"owner": "cachix",
"repo": "devenv-nixpkgs",
"rev": "fbc071e5c11e23fba50037de37268e3d8a1858eb",
"type": "github"
},
"original": {
"owner": "cachix",
"ref": "rolling",
"repo": "devenv-nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"devenv": "devenv",
"git-hooks": "git-hooks",
"nixpkgs": "nixpkgs",
"pre-commit-hooks": [
"git-hooks"
]
}
}
},
"root": "root",
"version": 7
}

19
devenv.nix Normal file
View File

@@ -0,0 +1,19 @@
{
pkgs,
lib,
config,
inputs,
...
}: {
packages = [
pkgs.git
pkgs.act
];
languages.python = {
enable = true;
uv = {
enable = true;
};
};
}

4
devenv.yaml Normal file
View File

@@ -0,0 +1,4 @@
# yaml-language-server: $schema=https://devenv.sh/devenv.schema.json
inputs:
nixpkgs:
url: github:cachix/devenv-nixpkgs/rolling

View File

@@ -87,9 +87,9 @@ qthelp:
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/invenio-config-tugraz.qhcp"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/invenio-config-iform.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/invenio-config-tugraz.qhc"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/invenio-config-iform.qhc"
applehelp:
$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
@@ -104,8 +104,8 @@ devhelp:
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/invenio-config-tugraz"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/invenio-config-tugraz"
@echo "# mkdir -p $$HOME/.local/share/devhelp/invenio-config-iform"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/invenio-config-iform"
@echo "# devhelp"
epub:

View File

@@ -1,7 +1,7 @@
..
Copyright (C) 2020 Mojib Wali.
invenio-config-tugraz is free software; you can redistribute it and/or
invenio-config-iform is free software; you can redistribute it and/or
modify it under the terms of the MIT License; see LICENSE file for more
details.
@@ -9,5 +9,5 @@
API Docs
========
.. automodule:: invenio_config_tugraz.ext
.. automodule:: invenio_config_iform.ext
:members:

View File

@@ -1,7 +1,7 @@
..
Copyright (C) 2020 Mojib Wali.
invenio-config-tugraz is free software; you can redistribute it and/or
invenio-config-iform is free software; you can redistribute it and/or
modify it under the terms of the MIT License; see LICENSE file for more
details.

View File

@@ -1,7 +1,7 @@
..
Copyright (C) 2020 Mojib Wali.
invenio-config-tugraz is free software; you can redistribute it and/or
invenio-config-iform is free software; you can redistribute it and/or
modify it under the terms of the MIT License; see LICENSE file for more
details.

View File

@@ -2,13 +2,13 @@
#
# Copyright (C) 2020 Mojib Wali.
#
# invenio-config-tugraz is free software; you can redistribute it and/or
# invenio-config-iform is free software; you can redistribute it and/or
# modify it under the terms of the MIT License; see LICENSE file for more
# details.
"""Sphinx configuration."""
from invenio_config_tugraz import __version__
from invenio_config_iform import __version__
# import sphinx.environment
@@ -46,7 +46,7 @@ source_suffix = ".rst"
master_doc = "index"
# General information about the project.
project = "invenio-config-tugraz"
project = "invenio-config-iform"
copyright = "2022, TU Graz"
author = "TU Graz"
@@ -108,15 +108,15 @@ todo_include_todos = False
html_theme = "alabaster"
html_theme_options = {
"description": "invenio module that adds tugraz configs.",
"description": "invenio module that adds iform configs.",
"github_user": "TU Graz",
"github_repo": "invenio-config-tugraz",
"github_repo": "invenio-config-iform",
"github_button": False,
"github_banner": True,
"show_powered_by": False,
"extra_nav_links": {
"invenio-config-tugraz@GitHub": "https://github.com/tu-graz-library/invenio-config-tugraz",
"invenio-config-tugraz@PyPI": "https://pypi.python.org/pypi/invenio-config-tugraz/",
"invenio-config-iform@Github": "https://github.com/Cian-H/invenio-config-iform",
"invenio-config-iform@PyPI": "https://pypi.python.org/pypi/invenio-config-iform/",
},
}
@@ -221,7 +221,7 @@ html_sidebars = {
# html_search_scorer = 'scorer.js'
# Output file base name for HTML help builder.
htmlhelp_basename = "invenio-config-tugraz_namedoc"
htmlhelp_basename = "invenio-config-iform_namedoc"
# -- Options for LaTeX output ---------------------------------------------
@@ -242,8 +242,8 @@ latex_elements = {
latex_documents = [
(
master_doc,
"invenio-config-tugraz.tex",
"invenio-config-tugraz Documentation",
"invenio-config-iform.tex",
"invenio-config-iform Documentation",
"Mojib Wali",
"manual",
),
@@ -277,8 +277,8 @@ latex_documents = [
man_pages = [
(
master_doc,
"invenio-config-tugraz",
"invenio-config-tugraz Documentation",
"invenio-config-iform",
"invenio-config-iform Documentation",
[author],
1,
)
@@ -296,11 +296,11 @@ man_pages = [
texinfo_documents = [
(
master_doc,
"invenio-config-tugraz",
"invenio-config-tugraz Documentation",
"invenio-config-iform",
"invenio-config-iform Documentation",
author,
"invenio-config-tugraz",
"invenio module that adds tugraz configs.",
"invenio-config-iform",
"invenio module that adds iform configs.",
"Miscellaneous",
),
]

View File

@@ -1,7 +1,7 @@
..
Copyright (C) 2020 Mojib Wali.
invenio-config-tugraz is free software; you can redistribute it and/or
invenio-config-iform is free software; you can redistribute it and/or
modify it under the terms of the MIT License; see LICENSE file for more
details.
@@ -9,5 +9,5 @@
Configuration
=============
.. automodule:: invenio_config_tugraz.config
.. automodule:: invenio_config_iform.config
:members:

View File

@@ -1,7 +1,7 @@
..
Copyright (C) 2020 Mojib Wali.
invenio-config-tugraz is free software; you can redistribute it and/or
invenio-config-iform is free software; you can redistribute it and/or
modify it under the terms of the MIT License; see LICENSE file for more
details.

View File

@@ -1,7 +1,7 @@
..
Copyright (C) 2020 Mojib Wali.
invenio-config-tugraz is free software; you can redistribute it and/or
invenio-config-iform is free software; you can redistribute it and/or
modify it under the terms of the MIT License; see LICENSE file for more
details.
@@ -12,7 +12,7 @@ User's Guide
------------
This part of the documentation will show you how to get started in using
invenio-config-tugraz.
invenio-config-iform.
.. toctree::
:maxdepth: 2

View File

@@ -1,7 +1,7 @@
..
Copyright (C) 2020 Mojib Wali.
invenio-config-tugraz is free software; you can redistribute it and/or
invenio-config-iform is free software; you can redistribute it and/or
modify it under the terms of the MIT License; see LICENSE file for more
details.

View File

@@ -127,9 +127,9 @@ if "%1" == "qthelp" (
echo.
echo.Build finished; now you can run "qcollectiongenerator" with the ^
.qhcp project file in %BUILDDIR%/qthelp, like this:
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\invenio-config-tugraz.qhcp
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\invenio-config-iform.qhcp
echo.To view the help file:
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\invenio-config-tugraz.ghc
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\invenio-config-iform.ghc
goto end
)

View File

@@ -1,7 +1,7 @@
..
Copyright (C) 2020 Mojib Wali.
invenio-config-tugraz is free software; you can redistribute it and/or
invenio-config-iform is free software; you can redistribute it and/or
modify it under the terms of the MIT License; see LICENSE file for more
details.
@@ -9,4 +9,4 @@
Usage
=====
.. automodule:: invenio_config_tugraz
.. automodule:: invenio_config_iform

View File

@@ -0,0 +1,11 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2025 I-Form Advanced Manufacturing Research Centre.
#
# invenio-config-iform is free software; you can redistribute it and/or
# modify it under the terms of the MIT License; see LICENSE file for more
# details.
"""Metadata for this python module."""
__version__ = "2025.5.20.6"

View File

@@ -2,19 +2,18 @@
#
# Copyright (C) 2020-2024 Graz University of Technology.
#
# invenio-config-tugraz is free software; you can redistribute it and/or
# invenio-config-iform 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 that adds tugraz configs."""
"""invenio module that adds I-Form configs."""
from .ext import InvenioConfigTugraz
from .__about__ import __version__
from .ext import InvenioConfigIform
from .utils import get_identity_from_user_by_email
__version__ = "0.12.2"
__all__ = (
"InvenioConfigIform",
"__version__",
"InvenioConfigTugraz",
"get_identity_from_user_by_email",
)

View File

@@ -2,36 +2,36 @@
#
# Copyright (C) 2020-2024 Graz University of Technology.
#
# invenio-config-tugraz is free software; you can redistribute it and/or
# invenio-config-iform 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 that adds tugraz configs."""
"""invenio module that adds I-Form configs."""
from invenio_i18n import gettext as _
CONFIG_TUGRAZ_SHIBBOLETH = False
CONFIG_IFORM_SHIBBOLETH = False
"""Set True if SAML is configured"""
CONFIG_TUGRAZ_SINGLE_IPS = []
CONFIG_IFORM_SINGLE_IPS = []
"""Allows access to users whose IP address is listed.
INVENIO_CONFIG_TUGRAZ_SINGLE_IPS =
INVENIO_CONFIG_IFORM_SINGLE_IPS =
["127.0.0.1", "127.0.0.2"]
"""
CONFIG_TUGRAZ_IP_RANGES = []
CONFIG_IFORM_IP_RANGES = []
"""Allows access to users whose range of IP address is listed.
INVENIO_CONFIG_TUGRAZ_IP_RANGES =
INVENIO_CONFIG_IFORM_IP_RANGES =
[["127.0.0.2", "127.0.0.99"], ["127.0.1.3", "127.0.1.5"]]
"""
CONFIG_TUGRAZ_IP_NETWORK = ""
CONFIG_IFORM_IP_NETWORK = ""
"""Allows access to users who are in the IP network."""
CONFIG_TUGRAZ_ROUTES = {
CONFIG_IFORM_ROUTES = {
"guide": "/guide",
"terms": "/terms",
"gdpr": "/gdpr",
@@ -201,7 +201,7 @@ If False, you won't be able to login via the web UI.
Instead if you have a overriden template somewhere in your config.py:
like this:
SECURITY_LOGIN_USER_TEMPLATE = 'invenio_theme_tugraz/accounts/login.html'
SECURITY_LOGIN_USER_TEMPLATE = 'invenio_theme_iform/accounts/login.html'
then you can remove this condition from header_login.htm:
{%- if config.ACCOUNTS %}
to render your overriden login.html
@@ -220,8 +220,8 @@ RECAPTCHA_PRIVATE_KEY = None
# See:
# https://invenio-records-permissions.readthedocs.io/en/latest/configuration.html
# Uncomment these to enable overriding RDM permissions
# from .rdm_permissions import TUGRAZRDMRecordServiceConfig
# RDM_RECORDS_BIBLIOGRAPHIC_SERVICE_CONFIG = TUGRAZRDMRecordServiceConfig
# from .rdm_permissions import IformRDMRecordServiceConfig
# RDM_RECORDS_BIBLIOGRAPHIC_SERVICE_CONFIG = IformRDMRecordServiceConfig
"""Access control configuration for records."""
# invenio-rdm-records

View File

@@ -2,13 +2,12 @@
#
# Copyright (C) 2024 Graz University of Technology.
#
# invenio-config-tugraz is free software; you can redistribute it and/or
# invenio-config-iform is free software; you can redistribute it and/or
# modify it under the terms of the MIT License; see LICENSE file for more
# details.
"""Custom fields."""
from invenio_records_resources.services.custom_fields import BooleanCF
ip_network = BooleanCF(name="ip_network")

View File

@@ -2,11 +2,11 @@
#
# Copyright (C) 2020-2024 Graz University of Technology.
#
# invenio-config-tugraz is free software; you can redistribute it and/or
# invenio-config-iform 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 that adds tugraz configs."""
"""invenio module that adds I-Form configs."""
from flask import Flask
@@ -14,8 +14,8 @@ from . import config
from .custom_fields import ip_network, single_ip
class InvenioConfigTugraz:
"""invenio-config-tugraz extension."""
class InvenioConfigIform:
"""invenio-config-iform extension."""
def __init__(self, app: Flask = None) -> None:
"""Extension initialization."""
@@ -26,12 +26,12 @@ class InvenioConfigTugraz:
"""Flask application initialization."""
self.init_config(app)
self.add_custom_fields(app)
app.extensions["invenio-config-tugraz"] = self
app.extensions["invenio-config-iform"] = self
def init_config(self, app: Flask) -> None:
"""Initialize configuration."""
for k in dir(config):
if k.startswith("INVENIO_CONFIG_TUGRAZ_"):
if k.startswith("INVENIO_CONFIG_IFORM_"):
app.config.setdefault(k, getattr(config, k))
def add_custom_fields(self, app: Flask) -> None:
@@ -57,5 +57,5 @@ def rank_blueprint_higher(app: Flask) -> None:
"""
bps = app.blueprints
for blueprint_name in list(bps.keys()):
if blueprint_name != "invenio_config_tugraz":
if blueprint_name != "invenio_config_iform":
bps.update({blueprint_name: bps.pop(blueprint_name)})

View File

@@ -2,12 +2,12 @@
#
# Copyright (C) 2024 Graz University of Technology.
#
# invenio-config-tugraz is free software; you can redistribute it and/or
# invenio-config-iform is free software; you can redistribute it and/or
# modify it under the terms of the MIT License; see LICENSE file for more
# details.
"""Permission-policies and roles, based on `flask-principal`."""
from .policies import TUGrazRDMRecordPermissionPolicy
from .policies import IformRDMRecordPermissionPolicy
__all__ = ("TUGrazRDMRecordPermissionPolicy",)
__all__ = ("IformRDMRecordPermissionPolicy",)

View File

@@ -2,7 +2,7 @@
#
# Copyright (C) 2020-2024 Graz University of Technology.
#
# invenio-config-tugraz is free software; you can redistribute it and/or
# invenio-config-iform is free software; you can redistribute it and/or
# modify it under the terms of the MIT License; see LICENSE file for more
# details.
@@ -54,7 +54,7 @@ from invenio_access.permissions import any_user
from invenio_records_permissions.generators import Generator
from invenio_search.engine import dsl
from .roles import tugraz_authenticated_user
from .roles import iform_authenticated_user
class RecordSingleIP(Generator):
@@ -65,12 +65,8 @@ class RecordSingleIP(Generator):
if record is None:
return []
# if record does not have singleip - return any_user
if not record.get("custom_fields", {}).get("single_ip", False):
return [any_user]
# if record has singleip, and the ip of the user matches the allowed ip
if self.check_permission():
if record.get("custom_fields", {}).get("single_ip", False) and self.check_permission():
return [any_user]
# non of the above - return empty
@@ -95,10 +91,7 @@ class RecordSingleIP(Generator):
Need provider is disallowed.
"""
try:
if (
kwargs["record"]["custom_fields"]["single_ip"]
and not self.check_permission()
):
if kwargs["record"]["custom_fields"]["single_ip"] and not self.check_permission():
return [any_user]
except KeyError:
@@ -125,7 +118,7 @@ class RecordSingleIP(Generator):
except RuntimeError:
return False
single_ips = current_app.config["CONFIG_TUGRAZ_SINGLE_IPS"]
single_ips = current_app.config["CONFIG_IFORM_SINGLE_IPS"]
return user_ip in single_ips
@@ -138,12 +131,8 @@ class AllowedFromIPNetwork(Generator):
if record is None:
return []
# if the record doesn't have set the ip range allowance
if not record.get("custom_fields", {}).get("ip_network", False):
return [any_user]
# if the record has set the ip_range allowance and is in the range
if self.check_permission():
if record.get("custom_fields", {}).get("ip_network", False) and self.check_permission():
return [any_user]
# non of the above - return empty
@@ -168,10 +157,7 @@ class AllowedFromIPNetwork(Generator):
Need provider is disallowed.
"""
try:
if (
kwargs["record"]["custom_fields"]["ip_network"]
and not self.check_permission()
):
if kwargs["record"]["custom_fields"]["ip_network"] and not self.check_permission():
return [any_user]
except KeyError:
@@ -193,7 +179,7 @@ class AllowedFromIPNetwork(Generator):
except RuntimeError:
return False
network = current_app.config["CONFIG_TUGRAZ_IP_NETWORK"]
network = current_app.config["CONFIG_IFORM_IP_NETWORK"]
try:
return ip_address(user_ip) in ip_network(network)
@@ -201,9 +187,9 @@ class AllowedFromIPNetwork(Generator):
return False
class TUGrazAuthenticatedUser(Generator):
"""Generates the `tugraz_authenticated_user` role-need."""
class IformAuthenticatedUser(Generator):
"""Generates the `iform_authenticated_user` role-need."""
def needs(self, **__: dict) -> list[Need]:
"""Generate needs to be checked against current user identity."""
return [tugraz_authenticated_user]
return [iform_authenticated_user]

View File

@@ -1,14 +1,15 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2020-2024 Graz University of Technology.
# Copyright (C) 2025 I-Form Advanced Manufacturing Research Centre.
#
# invenio-config-tugraz is free software; you can redistribute it and/or
# invenio-config-iform is free software; you can redistribute it and/or
# modify it under the terms of the MIT License; see LICENSE file for more
# details.
"""TU Graz permission-policy for RDMRecordService.
"""I-Form permission-policy for RDMRecordService.
To use, set config-variable `RDM_PERMISSION_POLICY` to `TUGrazRDMRecordPermissionPolicy`.
To use, set config-variable `RDM_PERMISSION_POLICY` to `IformRDMRecordPermissionPolicy`.
Policies list **what actions** can be done **by whom**
over an implied category of objects (typically records). A Policy is
@@ -25,16 +26,17 @@ One can define any action as long as it follows that pattern and
is verified at the moment it is undertaken.
"""
from invenio_administration.generators import Administration
from invenio_communities.generators import CommunityCurators
from invenio_rdm_records.services.generators import (
AccessGrant,
CommunityInclusionReviewers,
IfAtLeastOneCommunity,
IfDeleted,
IfExternalDOIRecord,
IfFileIsLocal,
IfNewRecord,
IfOneCommunity,
IfRecordDeleted,
IfRestricted,
RecordCommunitiesAction,
@@ -43,20 +45,15 @@ from invenio_rdm_records.services.generators import (
SecretLinks,
SubmissionReviewer,
)
from invenio_records_permissions.generators import (
AnyUser,
Disable,
IfConfig,
SystemProcess,
)
from invenio_records_permissions.generators import AnyUser, Disable, IfConfig, SystemProcess
from invenio_records_permissions.policies.records import RecordPermissionPolicy
from invenio_users_resources.services.permissions import UserManager
from .generators import AllowedFromIPNetwork, RecordSingleIP, TUGrazAuthenticatedUser
from .generators import AllowedFromIPNetwork, IformAuthenticatedUser, RecordSingleIP
class TUGrazRDMRecordPermissionPolicy(RecordPermissionPolicy):
"""Overwrite authenticatedness to mean `tugraz_authenticated` rather than *signed up*."""
class IformRDMRecordPermissionPolicy(RecordPermissionPolicy):
"""Overwrite authenticatedness to mean `iform_authenticated` rather than *signed up*."""
NEED_LABEL_TO_ACTION = {
"bucket-update": "update_files",
@@ -73,6 +70,7 @@ class TUGrazRDMRecordPermissionPolicy(RecordPermissionPolicy):
AccessGrant("manage"),
SystemProcess(),
]
can_manage_internal = [SystemProcess()]
can_curate = can_manage + [AccessGrant("edit"), SecretLinks("edit")]
can_review = can_curate + [SubmissionReviewer()]
can_preview = can_curate + [
@@ -91,8 +89,8 @@ class TUGrazRDMRecordPermissionPolicy(RecordPermissionPolicy):
RecordSingleIP(),
]
can_tugraz_authenticated = [TUGrazAuthenticatedUser(), SystemProcess()]
can_authenticated = can_tugraz_authenticated
can_iform_authenticated = [IformAuthenticatedUser(), SystemProcess()]
can_authenticated = can_iform_authenticated
can_all = [
AnyUser(),
SystemProcess(),
@@ -112,6 +110,7 @@ class TUGrazRDMRecordPermissionPolicy(RecordPermissionPolicy):
# Records - reading and creating
#
can_search = can_all
can_search_revisions = [Administration()]
can_read = [IfRestricted("record", then_=can_view, else_=can_all)]
can_read_deleted = [
@@ -126,12 +125,12 @@ class TUGrazRDMRecordPermissionPolicy(RecordPermissionPolicy):
can_get_content_files = [
IfFileIsLocal(then_=can_read_files, else_=[SystemProcess()]),
]
can_create = can_tugraz_authenticated
can_create = can_iform_authenticated
#
# Drafts
#
can_search_drafts = can_tugraz_authenticated
can_search_drafts = can_iform_authenticated
can_read_draft = can_preview
can_draft_read_files = can_preview + [ResourceAccessToken("read")]
can_update_draft = can_review
@@ -148,14 +147,14 @@ class TUGrazRDMRecordPermissionPolicy(RecordPermissionPolicy):
can_manage_files = [
IfConfig(
"RDM_ALLOW_METADATA_ONLY_RECORDS",
then_=[IfNewRecord(then_=can_tugraz_authenticated, else_=can_review)],
then_=[IfNewRecord(then_=can_iform_authenticated, else_=can_review)],
else_=[],
),
]
can_manage_record_access = [
IfConfig(
"RDM_ALLOW_RESTRICTED_RECORDS",
then_=[IfNewRecord(then_=can_tugraz_authenticated, else_=can_review)],
then_=[IfNewRecord(then_=can_iform_authenticated, else_=can_review)],
else_=[],
),
]
@@ -168,6 +167,7 @@ class TUGrazRDMRecordPermissionPolicy(RecordPermissionPolicy):
can_pid_update = can_review
can_pid_discard = can_review
can_pid_delete = can_review
can_pid_manage = [SystemProcess()]
#
# Actions
@@ -181,15 +181,38 @@ class TUGrazRDMRecordPermissionPolicy(RecordPermissionPolicy):
else_=[IfExternalDOIRecord(then_=[Disable()], else_=can_curate)],
),
]
can_publish = can_review
can_publish = [
IfConfig(
"RDM_COMMUNITY_REQUIRED_TO_PUBLISH",
then_=[
IfAtLeastOneCommunity(
then_=can_review,
else_=[Administration(), SystemProcess()],
),
],
else_=can_review,
),
]
can_lift_embargo = can_manage
#
# Record communities
#
can_add_community = can_manage
can_remove_community = [RecordOwners(), CommunityCurators(), SystemProcess()]
can_remove_record = [CommunityCurators()]
can_remove_community_ = [RecordOwners(), CommunityCurators(), SystemProcess()]
can_remove_community = [
IfConfig(
"RDM_COMMUNITY_REQUIRED_TO_PUBLISH",
then_=[
IfOneCommunity(
then_=[Administration(), SystemProcess()],
else_=can_remove_community_,
),
],
else_=can_remove_community_,
),
]
can_remove_record = [CommunityCurators(), Administration(), SystemProcess()]
can_bulk_add = [SystemProcess()]
#
@@ -250,4 +273,4 @@ class TUGrazRDMRecordPermissionPolicy(RecordPermissionPolicy):
# Used to hide at the moment the `parent.is_verified` field. It should be set to
# correct permissions based on which the field will be exposed only to moderators
can_moderate = [Disable()]
can_moderate = [SystemProcess()]

View File

@@ -2,20 +2,20 @@
#
# Copyright (C) 2024 Graz University of Technology.
#
# invenio-config-tugraz is free software; you can redistribute it and/or
# invenio-config-iform is free software; you can redistribute it and/or
# modify it under the terms of the MIT License; see LICENSE file for more
# details.
"""`RoleNeed`s for permission policies.
To use these roles, add them to the database via:
`$ invenio roles create tugraz_authenticated_user --description "..."`
`$ invenio roles create iform_authenticated --description "..."`
then add roles to users via:
`$ invenio roles add user@email.com tugraz_authenticated_user`
`$ invenio roles add user@email.com iform_authenticated`
"""
from flask_principal import RoleNeed
# using `flask_principal.RoleNeed`` instead of `invenio_access.SystemRoleNeed`,
# because these roles are assigned by an admin rather than automatically by the system
tugraz_authenticated_user = RoleNeed("tugraz_authenticated_user")
iform_authenticated_user = RoleNeed("iform_authenticated")

View File

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

View File

@@ -1,12 +1,12 @@
# German translations for invenio-config-tugraz.
# German translations for invenio-config-iform.
# Copyright (C) 2021 Graz University of Technology
# This file is distributed under the same license as the
# invenio-config-tugraz project.
# invenio-config-iform project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2021.
#
msgid ""
msgstr ""
"Project-Id-Version: invenio-config-tugraz 0.5.5\n"
"Project-Id-Version: invenio-config-iform 0.5.5\n"
"Report-Msgid-Bugs-To: mojib.wali@tugraz.at\n"
"POT-Creation-Date: 2021-04-27 15:30+0200\n"
"PO-Revision-Date: 2021-04-22 11:57+0200\n"
@@ -19,53 +19,53 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.9.0\n"
#: invenio_config_tugraz/config.py:87
#: invenio_config_iform/config.py:87
msgid "Welcome to TU Graz Repository!"
msgstr "Willkommen im TU Graz Repository!"
#: invenio_config_tugraz/templates/security/email/welcome.txt:1
#: invenio_config_iform/templates/security/email/welcome.txt:1
msgid "Dear user,"
msgstr "Lieber Nutzer,"
#: invenio_config_tugraz/templates/security/email/welcome.txt:3
#: invenio_config_iform/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
#: invenio_config_iform/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
#: invenio_config_iform/templates/security/email/welcome.txt:7
msgid "Guidelines:"
msgstr "Leitfaden:"
#: invenio_config_tugraz/templates/security/email/welcome.txt:7
#: invenio_config_iform/templates/security/email/welcome.txt:7
msgid "Repository Guide"
msgstr "Handbuch"
#: invenio_config_tugraz/templates/security/email/welcome.txt:7
#: invenio_config_iform/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
#: invenio_config_iform/templates/security/email/welcome.txt:8
msgid "Search Guide"
msgstr "Suchanleitung"
#: invenio_config_tugraz/templates/security/email/welcome.txt:9
#: invenio_config_iform/templates/security/email/welcome.txt:9
msgid "Terms And Conditions"
msgstr "Nutzungsbedingungen"
#: invenio_config_tugraz/templates/security/email/welcome.txt:10
#: invenio_config_iform/templates/security/email/welcome.txt:10
msgid "Data Protection Rights"
msgstr "Datenschutzerklärung"
#: invenio_config_tugraz/templates/security/email/welcome.txt:13
#: invenio_config_iform/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
#: invenio_config_iform/templates/security/email/welcome.txt:16
msgid ""
"If you require any assistance please do not hesitate to contact us at "
"repository-support@tugraz.at."
@@ -73,11 +73,10 @@ 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
#: invenio_config_iform/templates/security/email/welcome.txt:18
msgid "Best regards,"
msgstr "Mit freundlichen Grüßen,"
#: invenio_config_tugraz/templates/security/email/welcome.txt:19
#: invenio_config_iform/templates/security/email/welcome.txt:19
msgid "TU Graz Repository Team"
msgstr "TU Graz Repository Team"

View File

@@ -1,13 +1,13 @@
# Translations template for invenio-config-tugraz.
# Translations template for invenio-config-iform.
# Copyright (C) 2021 Graz University of Technology
# This file is distributed under the same license as the
# invenio-config-tugraz project.
# invenio-config-iform project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2021.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: invenio-config-tugraz 0.5.5\n"
"Project-Id-Version: invenio-config-iform 0.5.5\n"
"Report-Msgid-Bugs-To: mojib.wali@tugraz.at\n"
"POT-Creation-Date: 2021-04-27 15:30+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
@@ -18,61 +18,60 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.9.0\n"
#: invenio_config_tugraz/config.py:87
#: invenio_config_iform/config.py:87
msgid "Welcome to TU Graz Repository!"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:1
#: invenio_config_iform/templates/security/email/welcome.txt:1
msgid "Dear user,"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:3
#: invenio_config_iform/templates/security/email/welcome.txt:3
msgid "Welcome to the Repository of TU Graz!"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:5
#: invenio_config_iform/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
#: invenio_config_iform/templates/security/email/welcome.txt:7
msgid "Guidelines:"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:7
#: invenio_config_iform/templates/security/email/welcome.txt:7
msgid "Repository Guide"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:7
#: invenio_config_iform/templates/security/email/welcome.txt:7
msgid "how to upload files"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:8
#: invenio_config_iform/templates/security/email/welcome.txt:8
msgid "Search Guide"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:9
#: invenio_config_iform/templates/security/email/welcome.txt:9
msgid "Terms And Conditions"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:10
#: invenio_config_iform/templates/security/email/welcome.txt:10
msgid "Data Protection Rights"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:13
#: invenio_config_iform/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
#: invenio_config_iform/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
#: invenio_config_iform/templates/security/email/welcome.txt:18
msgid "Best regards,"
msgstr ""
#: invenio_config_tugraz/templates/security/email/welcome.txt:19
#: invenio_config_iform/templates/security/email/welcome.txt:19
msgid "TU Graz Repository Team"
msgstr ""

View File

@@ -2,7 +2,7 @@
#
# Copyright (C) 2022-2024 Graz University of Technology.
#
# invenio-config-tugraz is free software; you can redistribute it and/or
# invenio-config-iform is free software; you can redistribute it and/or
# modify it under the terms of the MIT License; see LICENSE file for more
# details.
@@ -38,8 +38,8 @@ def get_identity_from_user_by_email(email: str | None = None) -> Identity:
return identity
def tugraz_account_setup_extension(user, account_info) -> None: # noqa: ANN001, ARG001
"""Add tugraz_authenticated role to user after SAML-login was acknowledged.
def iform_account_setup_extension(user, account_info) -> None: # noqa: ANN001, ARG001
"""Add iform_authenticated role to user after SAML-login was acknowledged.
To use, have `acs_handler_factory` call invenio_saml's `default_account_setup` first,
then this function second.
@@ -49,25 +49,25 @@ def tugraz_account_setup_extension(user, account_info) -> None: # noqa: ANN001,
# invenio.cfg
from invenio_saml.handlers import default_account_setup, acs_handler_factory
def tugraz_account_setup(user, account_info):
def iform_account_setup(user, account_info):
# links external `account_info` with our database's `user` for future logins
default_account_setup(user, account_info)
tugraz_account_setup_extension(user, account_info)
iform_account_setup_extension(user, account_info)
SSO_SAML_IDPS = {
"my-tugraz-idp": {
"my-iform-idp": {
...
"acs_handler": acs_handler_factory(
"my-tugraz-idp", account_setup=tugraz_account_setup
"my-iform-idp", account_setup=iform_account_setup
)
}
}
For this to work, the role tugraz_authenticated must have been created
(e.g. via `invenio roles create tugraz_authenticated`).
For this to work, the role iform_authenticated must have been created
(e.g. via `invenio roles create iform_authenticated`).
"""
user_email = account_info["user"]["email"]
# NOTE: `datastore.commit`ing will be done by acs_handler that calls this func
# NOTE: this is a No-Op when user_email already has role tugraz_authenticated
current_accounts.datastore.add_role_to_user(user_email, "tugraz_authenticated")
# NOTE: this is a No-Op when user_email already has role iform_authenticated
current_accounts.datastore.add_role_to_user(user_email, "iform_authenticated")

View File

@@ -2,11 +2,11 @@
#
# Copyright (C) 2020-2024 Graz University of Technology.
#
# invenio-config-tugraz is free software; you can redistribute it and/or
# invenio-config-iform 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."""
"""Invenio module for I-Form config."""
from flask import Blueprint, Flask, redirect, url_for
from invenio_i18n import get_locale
@@ -14,11 +14,11 @@ from werkzeug.wrappers import Response as BaseResponse
def ui_blueprint(app: Flask) -> Blueprint:
"""Blueprint for the routes and resources provided by invenio-config-tugraz."""
routes = app.config.get("CONFIG_TUGRAZ_ROUTES")
"""Blueprint for the routes and resources provided by invenio-config-iform."""
routes = app.config.get("CONFIG_IFORM_ROUTES")
blueprint = Blueprint(
"invenio_config_tugraz",
"invenio_config_iform",
__name__,
template_folder="templates",
static_folder="static",
@@ -32,12 +32,12 @@ def ui_blueprint(app: Flask) -> Blueprint:
def guide() -> BaseResponse:
"""TUGraz_Repository_Guide."""
"""I-Form_Repository_Guide."""
locale = get_locale()
return redirect(
url_for(
"static",
filename=f"documents/TUGraz_Repository_Guide_02.1_{locale}.pdf",
filename=f"documents/I-Form_Repository_Guide_02.1_{locale}.pdf",
_external=True,
),
)
@@ -49,7 +49,7 @@ def terms() -> BaseResponse:
return redirect(
url_for(
"static",
filename=f"documents/TUGraz_Repository_Terms_And_Conditions_{locale}.pdf",
filename=f"documents/I-Form_Repository_Terms_And_Conditions_{locale}.pdf",
_external=True,
),
)
@@ -61,7 +61,7 @@ def gdpr() -> BaseResponse:
return redirect(
url_for(
"static",
filename=f"documents/TUGraz_Repository_General_Data_Protection_Rights_{locale}.pdf",
filename=f"documents/I-Form_Repository_General_Data_Protection_Rights_{locale}.pdf",
_external=True,
),
)

View File

@@ -1,22 +1,150 @@
[build-system]
requires = ["setuptools", "wheel", "babel>2.8"]
build-backend = "setuptools.build_meta"
[project]
name = "invenio-config-iform"
dynamic = ["version"]
description = "Invenio module that adds I-Form configs."
readme = { file = "README.rst", content-type = "text/x-rst" }
license = "MIT"
authors = [
{ name = "I-Form Advanced Research Manufacturing Research Centre", email = "cian.hughes@dcu.ie" },
]
keywords = ["invenio", "config", "I-Form"]
classifiers = [
"Environment :: Web Environment",
"Intended Audience :: Developers",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Topic :: Internet :: WWW/HTTP :: Dynamic Content",
"Topic :: Software Development :: Libraries :: Python Modules",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Development Status :: 3 - Alpha",
]
requires-python = ">=3.10,<3.14"
dependencies = [
"invenio-cache>=1.1.1",
"invenio-i18n>=2.0.0",
"invenio-rdm-records>=4.0.0",
]
[project.urls]
Homepage = "https://github.com/Cian-H/invenio-config-iform"
Issues = "https://github.com/Cian-H/invenio-config-iform/issues"
[project.scripts]
test-docs = "scripts.test_docs:main"
test-code = "pytest:console_main"
test = "scripts.test:main"
[project.entry-points."invenio_base.apps"]
invenio_config_iform = "invenio_config_iform:InvenioConfigIform"
[project.entry-points."invenio_base.blueprints"]
invenio_config_iform = "invenio_config_iform.views:ui_blueprint"
[project.entry-points."invenio_i18n.translations"]
messages = "invenio_config_iform"
[project.entry-points."invenio_config.module"]
invenio_config_iform = "invenio_config_iform.config"
[project.entry-points."invenio_base.finalize_app"]
invenio_config_iform = "invenio_config_iform.ext:finalize_app"
[dependency-groups]
dev = [
"hatch>=1.14.1",
"pre-commit>=4.2.0",
"pydocstyle>=6.3.0",
"ruff>=0.11.7",
]
tests = [
"invenio-app>=1.5.0",
"invenio-search[opensearch2]>=2.1.0",
"pytest-invenio>=2.1.0",
"pytest-ruff>=0.4.1",
"ruff>=0.5.3",
"Sphinx>=4.5.0",
]
[build-system]
requires = ["hatchling", "hatch-calver"]
build-backend = "hatchling.build"
[tool.hatch.version]
scheme = "calver"
path = "invenio_config_iform/__about__.py"
[tool.hatch.build]
include = ["invenio_config_iform"]
exclude = [".venv", "tests/*", "*/tests/*", "*.rst", "run-tests.sh"]
# Testing configuration
[tool.pytest]
addopts = "--ruff --ruff-format --pydocstyle --doctest-glob=\"*.rst\" --doctest-modules --cov=invenio_config_iform --cov-report=term-missing tests invenio_config_iform"
testpaths = ["tests", "invenio_config_iform"]
live_server_scope = "module"
[tool.pytest.ini_options]
addopts = "--ruff --ruff-format --pydocstyle --doctest-glob=\"*.rst\" --doctest-modules --cov=invenio_config_iform --cov-report=term-missing tests invenio_config_iform"
testpaths = ["tests", "invenio_config_iform"]
live_server_scope = "module"
# Code style tools configuration
[tool.ruff]
line-length = 100
target-version = "py313"
exclude = ["docs"]
[tool.ruff.lint]
select = ["ALL"]
ignore = [
"ANN101", "ANN102",
"D203", "D211", "D212", "D213",
"E501",
"ERA001",
"FA102",
"FIX002",
"INP001",
"RUF005", "RUF012",
"S101",
"TD002", "TD003",
"UP009",
"D203",
"D211",
"D212",
"D213",
"E501",
"ERA001",
"FA102",
"FIX002",
"INP001",
"RUF005",
"RUF012",
"S101",
"TD002",
"TD003",
"UP009",
]
[tool.ruff.lint.isort]
force-sort-within-sections = true
lines-after-imports = -1
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
line-ending = "auto"
[tool.pydocstyle]
add_ignore = ["D401"]
# Babel configuration
[tool.babel.compile_catalog]
directory = "invenio_config_iform/translations/"
use-fuzzy = true
[tool.babel.extract_messages]
copyright_holder = "I-Form Advanced Research Manufacturing Research Centre"
msgid_bugs_address = "cian.hughes@dcu.ie"
mapping-file = "babel.ini"
output-file = "invenio_config_iform/translations/messages.pot"
add-comments = "NOTE"
[tool.babel.init_catalog]
input-file = "invenio_config_iform/translations/messages.pot"
output-dir = "invenio_config_iform/translations/"
[tool.babel.update_catalog]
input-file = "invenio_config_iform/translations/messages.pot"
output-dir = "invenio_config_iform/translations/"

View File

@@ -1,23 +0,0 @@
#!/usr/bin/env bash
# -*- coding: utf-8 -*-
#
# Copyright (C) 2019-2020 CERN.
# Copyright (C) 2019-2020 Northwestern University.
# Copyright (C) 2020-2024 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.
# Quit on errors
set -o errexit
# Quit on unbound symbols
set -o nounset
ruff check .
python -m check_manifest
python -m sphinx.cmd.build -qnN docs docs/_build/html
python -m pytest

View File

@@ -0,0 +1,126 @@
#!/usr/bin/env python
"""A Script for checking that the version number has been incremented between pushes."""
from pathlib import Path
import re
import shutil
import subprocess
import sys
import tomllib
ALLOWED_EXECUTABLES: list[str] = [
"git",
"uv",
]
def validate_command(command: str) -> list[str]:
"""Validate and guard command calls.
Args:
command (str): the command to be validated.
Returns:
str: the validated command
Raises:
FileNotFoundError: if the command was not found
"""
cmd: list[str] = command.split().copy()
if cmd[0] not in ALLOWED_EXECUTABLES:
msg = f"Command {cmd} is not allowed!"
raise PermissionError(msg)
call = shutil.which(cmd[0])
if not call:
msg = f"Command {call} not found!"
raise FileNotFoundError(msg)
cmd[0] = call
if cmd[0] == "uv" and cmd[1] == "run":
cmd = [cmd[0], cmd[1], *validate_command("".join(cmd[2:]))]
return cmd
def run_command(command: str) -> str:
"""Run a command and get its output as a string.
Args:
command (str): The command to run.
Returns:
The output returned on stdout.
"""
cmd = validate_command(command)
return subprocess.run( # noqa: S603
cmd,
capture_output=True,
text=True,
check=True,
).stdout.strip()
def get_version_file_from_pyproject() -> str:
"""Get the path to the version file from the pyproject file.
Returns:
str: the path to the project version file
Raises:
FileNotFoundError: the pyproject file is not found
KeyError: the pyproject file does not reference a version file
"""
try:
with Path("pyproject.toml").open("rb") as f:
return tomllib.load(f)["tool"]["hatch"]["version"]["path"]
except FileNotFoundError as e:
msg = "Project has no pyproject.toml file!"
raise FileNotFoundError(msg) from e
except KeyError as e:
msg = "Attribute `tool.hatch.version.path` not found in pyproject.toml"
raise KeyError(msg) from e
def get_remote_version(remote: str, branch: str, version_file: str) -> str:
"""Get the version from the repository remote.
Args:
remote (str): The remote to fetch the version string from.
branch (str): The branch to fetch the version string from.
version_file (str): The file to fetch the version string from.
Returns:
str: The version string.
Raises:
AttributeError: NO `__version__` attribute was found in `version_file`.
"""
remote_file = f"{remote}/{branch}:{version_file}"
match = re.search(
r"__version__\s*=\s*['\"]([^'\"]+)['\"]",
run_command(f"git show {remote_file}"),
)
if match:
return match.group(1)
msg = f"No `__version__` attribute found in {remote_file}"
raise AttributeError(msg)
def main() -> None:
"""Entrypoint for this script."""
version_file = get_version_file_from_pyproject()
branch = run_command("git rev-parse --abbrev-ref HEAD")
remote = sys.argv[1] if len(sys.argv) > 1 else "origin"
current_version = run_command("uv run hatch version")
remote_version = get_remote_version(remote, branch, version_file)
assert current_version != remote_version, (
"Version has not been incremented! Please update the version before pushing."
)
if __name__ == "__main__":
main()

19
scripts/test.py Normal file
View File

@@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2025 I-Form Advanced Manufacturing Research Centre.
#
# invenio-config-iform is free software; you can redistribute it and/or
# modify it under the terms of the MIT License; see LICENSE file for more
# details.
"""Run all tests for this module consecutively."""
import pytest
from . import test_docs
def main() -> None:
"""Run tests for this module."""
test_docs.main()
pytest.console_main()

16
scripts/test_docs.py Normal file
View File

@@ -0,0 +1,16 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2025 I-Form Advanced Manufacturing Research Centre.
#
# invenio-config-iform is free software; you can redistribute it and/or
# modify it under the terms of the MIT License; see LICENSE file for more
# details.
"""A script for testing sphinx documentation building."""
from sphinx.cmd.build import main as build_docs
def main() -> None:
"""Attempt to build documentation."""
build_docs(["-nN", "docs", "docs/_build/html"])

100
setup.cfg
View File

@@ -1,100 +0,0 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2020-2024 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.
[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.12
Development Status :: 3 - Alpha
[options]
include_package_data = True
packages = find:
python_requires = >=3.12
zip_safe = False
install_requires =
invenio-cache>=1.1.1
invenio-i18n>=2.0.0
invenio-rdm-records>=4.0.0
[options.extras_require]
tests =
invenio-app>=1.5.0
invenio-search[opensearch2]>=2.1.0,<3.0.0
pytest-black-ng>=0.4.0
pytest-invenio>=2.1.0,<3.0.0
ruff>=0.5.3
Sphinx>=4.5.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
invenio_base.finalize_app =
invenio_config_tugraz = invenio_config_tugraz.ext:finalize_app
[aliases]
test = pytest
[build_sphinx]
source-dir = docs/
build-dir = docs/_build
all_files = 1
[bdist_wheel]
universal = 1
[compile_catalog]
directory = invenio_config_tugraz/translations/
[extract_messages]
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
add-comments = NOTE
[init_catalog]
input-file = invenio_config_tugraz/translations/messages.pot
output-dir = invenio_config_tugraz/translations/
[update_catalog]
input-file = invenio_config_tugraz/translations/messages.pot
output-dir = invenio_config_tugraz/translations/
[isort]
profile=black
[check-manifest]
ignore = *-requirements.txt
[tool:pytest]
addopts = --black --cov=invenio_config_tugraz --cov-report=term-missing
testpaths = tests invenio_config_tugraz
live_server_scope = module

View File

@@ -1,13 +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.
"""invenio module that adds tugraz configs."""
from setuptools import setup
setup()

View File

@@ -3,7 +3,7 @@
# Copyright (C) 2020 Mojib Wali.
# Copyright (C) 2020-2024 Graz University of Technology.
#
# invenio-config-tugraz is free software; you can redistribute it and/or
# invenio-config-iform is free software; you can redistribute it and/or
# modify it under the terms of the MIT License; see LICENSE file for more
# details.
@@ -13,11 +13,10 @@ See https://pytest-invenio.readthedocs.io/ for documentation on which test
fixtures are available.
"""
import pytest
from flask import Flask
import pytest
from invenio_config_tugraz import InvenioConfigTugraz
from invenio_config_iform import InvenioConfigIform
@pytest.fixture(scope="module")
@@ -27,7 +26,7 @@ def create_app(instance_path: str) -> Flask:
def factory(**config: str) -> Flask:
app = Flask("testapp", instance_path=instance_path)
app.config.update(**config)
InvenioConfigTugraz(app)
InvenioConfigIform(app)
return app
return factory

View File

@@ -2,7 +2,7 @@
#
# Copyright (C) 2020-2024 Graz University of Technology.
#
# invenio-config-tugraz is free software; you can redistribute it and/or
# invenio-config-iform is free software; you can redistribute it and/or
# modify it under the terms of the MIT License; see LICENSE file for more
# details.
@@ -10,12 +10,12 @@
from flask import Flask
from invenio_config_tugraz import InvenioConfigTugraz
from invenio_config_iform import InvenioConfigIform
def test_version() -> None:
"""Test version import."""
from invenio_config_tugraz import __version__
from invenio_config_iform import __version__
assert __version__
@@ -23,11 +23,11 @@ def test_version() -> None:
def test_init() -> None:
"""Test extension initialization."""
app = Flask("testapp")
ext = InvenioConfigTugraz(app)
assert "invenio-config-tugraz" in app.extensions
ext = InvenioConfigIform(app)
assert "invenio-config-iform" in app.extensions
app = Flask("testapp")
ext = InvenioConfigTugraz()
assert "invenio-config-tugraz" not in app.extensions
ext = InvenioConfigIform()
assert "invenio-config-iform" not in app.extensions
ext.init_app(app)
assert "invenio-config-tugraz" in app.extensions
assert "invenio-config-iform" in app.extensions

View File

@@ -2,7 +2,7 @@
#
# Copyright (C) 2024 Graz University of Technology.
#
# invenio-config-tugraz is free software; you can redistribute it and/or
# invenio-config-iform is free software; you can redistribute it and/or
# modify it under the terms of the MIT License; see LICENSE file for more
# details.
@@ -10,24 +10,24 @@
from invenio_rdm_records.services.permissions import RDMRecordPermissionPolicy
from invenio_config_tugraz.permissions.policies import TUGrazRDMRecordPermissionPolicy
from invenio_config_iform.permissions.policies import IformRDMRecordPermissionPolicy
ALLOWED_DIFFERENCES = {
"can_all",
"can_authenticated",
"can_create",
"can_iform_authenticated",
"can_search",
"can_view",
"can_all",
"can_search_drafts",
"can_tugraz_authenticated",
"can_view",
}
def test_policies_synced() -> None:
"""Make sure our permission-policy stays synced with invenio's."""
tugraz_cans = {
name: getattr(TUGrazRDMRecordPermissionPolicy, name)
for name in dir(TUGrazRDMRecordPermissionPolicy)
iform_cans = {
name: getattr(IformRDMRecordPermissionPolicy, name)
for name in dir(IformRDMRecordPermissionPolicy)
if name.startswith("can_")
}
rdm_cans = {
@@ -37,52 +37,52 @@ def test_policies_synced() -> None:
}
# check whether same set of `can_<action>`s`
if extras := set(tugraz_cans) - set(rdm_cans) - ALLOWED_DIFFERENCES:
if extras := set(iform_cans) - set(rdm_cans) - ALLOWED_DIFFERENCES:
msg = f"""
TU Graz's permission-policy has additional fields over invenio-rdm's:{extras}
I-Form's permission-policy has additional fields over invenio-rdm's:{extras}
if this is intentional, add to ALLOWED_DIFFERENCES in test-file
otherwise remove extraneous fields from TUGrazRDMRecordPermissionPolicy
otherwise remove extraneous fields from IformRDMRecordPermissionPolicy
"""
raise KeyError(msg)
if missing := set(rdm_cans) - set(tugraz_cans):
if missing := set(rdm_cans) - set(iform_cans):
msg = f"""
invenio-rdm's permission-policy has fields unhandled by TU Graz's: {missing}
invenio-rdm's permission-policy has fields unhandled by I-Form's: {missing}
if this is intentional, add to ALLOWED_DIFFERENCES
otherwise set the corresponding fields in TUGrazRDMRecordPermissionPolicy
otherwise set the corresponding fields in IformRDMRecordPermissionPolicy
"""
raise KeyError(msg)
# check whether same permission-generators used for same `can_<action>`
for can_name in rdm_cans.keys() & tugraz_cans.keys():
for can_name in rdm_cans.keys() & iform_cans.keys():
if can_name in ALLOWED_DIFFERENCES:
continue
tugraz_can = tugraz_cans[can_name]
iform_can = iform_cans[can_name]
rdm_can = rdm_cans[can_name]
# permission-Generators don't implement equality checks for their instances
# we can however compare which types (classes) of Generators are used...
if {type(gen) for gen in tugraz_can} != {type(gen) for gen in rdm_can}:
if {type(gen) for gen in iform_can} != {type(gen) for gen in rdm_can}:
msg = f"""
permission-policy for `{can_name}` differs between TU-Graz and invenio-rdm
permission-policy for `{can_name}` differs between I-Form and invenio-rdm
if this is intentional, add to ALLOWED_DIFFERENCES in test-file
otherwise fix TUGrazRDMRecordPermissionPolicy
otherwise fix IformRDMRecordPermissionPolicy
"""
raise ValueError(msg)
# check whether same `NEED_LABEL_TO_ACTION`
tugraz_label_to_action = TUGrazRDMRecordPermissionPolicy.NEED_LABEL_TO_ACTION
iform_label_to_action = IformRDMRecordPermissionPolicy.NEED_LABEL_TO_ACTION
rdm_label_to_action = RDMRecordPermissionPolicy.NEED_LABEL_TO_ACTION
for label in tugraz_label_to_action.keys() & rdm_label_to_action.keys():
for label in iform_label_to_action.keys() & rdm_label_to_action.keys():
if label in ALLOWED_DIFFERENCES:
continue
if tugraz_label_to_action.get(label) != rdm_label_to_action.get(label):
if iform_label_to_action.get(label) != rdm_label_to_action.get(label):
msg = f"""
invenio-rdm's NEED_LABEL_TO_ACTION differs from TU Graz's in {label}
invenio-rdm's NEED_LABEL_TO_ACTION differs from I-Form's in {label}
if this is intentional, add to ALLOWED_DIFFERENCES in test-file
otherwise fix TUGrazRDMRecordPermissionPolicy.NEED_LABEL_TO_ACTION
otherwise fix IformRDMRecordPermissionPolicy.NEED_LABEL_TO_ACTION
"""
raise ValueError(msg)

5356
uv.lock generated Normal file

File diff suppressed because it is too large Load Diff