Compare commits

..

14 Commits

Author SHA1 Message Date
Mojib Wali
cb7f00d76c v0.3.0 2020-12-04 10:35:38 +01:00
Mojib Wali
be22817a91 ci(repo): migrate to github actions. #34
tests(repo): modified to github actions.
2020-12-04 10:30:34 +01:00
Mojib Wali
1ca39d2f8d refactor(user):userprofile #31
* disable userprofile extended form.
  User is no longer obliged to provide username and name when registering.
  This mean that the user can change/add name and username from profile section.
* disable changing email address.
  User no longer can change the email address from profile section.
2020-11-10 12:19:55 +01:00
mb
7069bbe481 refactor(user):disable changing email address
* disable userprofile extended form.
2020-11-09 12:23:12 +01:00
Mojib Wali
396f44fbd8 url/badge update
Repository transfer from 'https://github.com/mb-wali' to 'https://github.com/tu-graz-library'.
2020-10-28 13:55:09 +01:00
Unix
8f2670235b badges/url updated
after transfering the module the path/url was invalid.
2020-10-28 13:46:34 +01:00
Mojib Wali
d70c690ab3 v0.2.2 2020-10-19 14:39:41 +02:00
Mojib Wali
6803ce9614 bump dependencies
* bump dependency : invenio-rdm-records
* SQLAlchemy-Utils for SQL queries
* invenio-search with elasticsearch 7
* SQLAlchemy-Continuum for a versioning extension for SQLAlchemy
2020-10-19 14:28:53 +02:00
Mojib Wali
4d89290b58 bump dependency : invenio-rdm-records
This change is required for the latest invenioRDM - sep release.
2020-10-19 14:10:07 +02:00
Christoph Ladurner
2ccd24cfca all python files are now formated with black (#23)
* all python files are now formated with black

NOTE:
some configurations where necessary. flake8 line-length has to be set to 88
which is the default for black. but this was not enough some lines of black
where formated longer then 88 characters. found flake8-bugbear with B950.

with that and in combination with ignore=E501 it is possible to ignore long
lines, but if there are lines to long it will still point it out.

further also for isort some configuration was necessary

REFERENCES:
https://github.com/psf/black/blob/master/docs/compatible_configs.md#isort
https://github.com/psf/black/blob/master/docs/compatible_configs.md#flake8
https://github.com/PyCQA/flake8-bugbear#opinionated-warnings

* ext removed unnecessary commented import statement

* generators add pragma: no cover to increase code coverage

NOTE:
this should be corrected with a real test in one of the next commits

* fixed the syntax.

Co-authored-by: Mojib Wali <44528277+mb-wali@users.noreply.github.com>
2020-10-15 10:36:58 +02:00
Mojib Wali
0a37a8015e global: extension class to uppercase.
The extension class name is changed to uppercase.
2020-10-12 10:03:55 +02:00
Mojib Wali
975ac67a8a release; v0.2.1 2020-10-06 09:34:09 +02:00
mb
21d1a9d4c6 Merge branch 'master' of https://github.com/mb-wali/invenio-config-tugraz 2020-10-06 09:30:32 +02:00
mb
3d3354805d translation: extract messages and added required files for i18n, This closes #18 2020-10-06 09:29:52 +02:00
23 changed files with 408 additions and 279 deletions

View File

@@ -32,8 +32,8 @@ indent_size = 4
[*.{css,html,js,json,yml}] [*.{css,html,js,json,yml}]
indent_size = 2 indent_size = 2
# Matches the exact files either package.json or .travis.yml # Matches the exact files either package.json or .github/workflows/*.yml
[{package.json,.travis.yml}] [{package.json,.github/workflows/*.yml}]
indent_size = 2 indent_size = 2
# Dockerfile # Dockerfile

54
.github/workflows/tests.yml vendored Normal file
View File

@@ -0,0 +1,54 @@
name: CI
on:
push:
branches: master
pull_request:
branches: master
schedule:
# * is a special character in YAML so you have to quote this string
- cron: '0 3 * * 6'
workflow_dispatch:
inputs:
reason:
description: 'Reason'
required: false
default: 'Manual trigger'
jobs:
Tests:
runs-on: ubuntu-20.04
strategy:
matrix:
python-version: [3.6, 3.7, 3.8]
requirements-level: [min, pypi]
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 all --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 .[all]
pip freeze
- name: Run tests
run: |
./run-tests.sh

View File

@@ -1,53 +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.
branches:
except:
- /^v\d+\.\d+(\.\d+)?(\S*)?$/
notifications:
email: false
sudo: false
language: python
matrix:
fast_finish: true
allow_failures:
# To allow failures, you need to specify the full environment
- env: REQUIREMENTS=devel
cache:
- pip
env:
- REQUIREMENTS=lowest
- REQUIREMENTS=release DEPLOY=true
- REQUIREMENTS=devel
python:
- "3.6"
- "3.7"
before_install:
- "nvm install 6; nvm use 6"
- "travis_retry pip install --upgrade pip setuptools py"
- "travis_retry pip install twine wheel coveralls requirements-builder"
- "requirements-builder -e all --level=min setup.py > .travis-lowest-requirements.txt"
- "requirements-builder -e all --level=pypi setup.py > .travis-release-requirements.txt"
- "requirements-builder -e all --level=dev --req requirements-devel.txt setup.py > .travis-devel-requirements.txt"
install:
- "travis_retry pip install -r .travis-${REQUIREMENTS}-requirements.txt"
- "travis_retry pip install -e .[all]"
script:
- "./run-tests.sh"
after_success:
- coveralls

View File

@@ -10,7 +10,7 @@ Types of Contributions
Report Bugs Report Bugs
~~~~~~~~~~~ ~~~~~~~~~~~
Report bugs at https://github.com/mb-wali/invenio-config-tugraz/issues. Report bugs at https://github.com/tu-graz-library/invenio-config-tugraz/issues.
If you are reporting a bug, please include: If you are reporting a bug, please include:
@@ -41,7 +41,7 @@ Submit Feedback
~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~
The best way to send feedback is to file an issue at The best way to send feedback is to file an issue at
https://github.com/mb-wali/invenio-config-tugraz/issues. https://github.com/tu-graz-library/invenio-config-tugraz/issues.
If you are proposing a feature: If you are proposing a feature:
@@ -113,6 +113,6 @@ Before you submit a pull request, check that it meets these guidelines:
1. The pull request should include tests and must not decrease test coverage. 1. The pull request should include tests and must not decrease test coverage.
2. If the pull request adds functionality, the docs should be updated. Put 2. If the pull request adds functionality, the docs should be updated. Put
your new functionality into a function with a docstring. your new functionality into a function with a docstring.
3. The pull request should work for Python 2.7, 3.5 and 3.6. Check 3. The pull request should work for Python 3.6 and 3.7. Check
https://travis-ci.org/https://github.com/https://github.com/mb-/pull_requests https://github.com/github/tu-graz-library/invenio-config-tugraz//actions?query=event%3Apull_request
and make sure that the tests pass for all supported Python versions. and make sure that the tests pass for all supported Python versions.

View File

@@ -42,3 +42,4 @@ recursive-include invenio_config_tugraz *.crt
recursive-include invenio_config_tugraz *.json recursive-include invenio_config_tugraz *.json
recursive-include invenio_config_tugraz *.key recursive-include invenio_config_tugraz *.key
recursive-include invenio_config_tugraz *.xml recursive-include invenio_config_tugraz *.xml
recursive-include invenio_config_tugraz *.gitkeep

View File

@@ -9,8 +9,8 @@
invenio-config-tugraz invenio-config-tugraz
======================= =======================
.. image:: https://travis-ci.com/mb-wali/invenio-config-tugraz.svg .. image:: https://github.com/tu-graz-library/invenio-config-tugraz/workflows/CI/badge.svg
:target: https://travis-ci.com/github/mb-wali/invenio-config-tugraz :target: https://github.com/tu-graz-library/invenio-config-tugraz/actions
.. image:: https://img.shields.io/pypi/dm/invenio-config-tugraz.svg .. image:: https://img.shields.io/pypi/dm/invenio-config-tugraz.svg
:target: https://pypi.python.org/pypi/invenio-config-tugraz :target: https://pypi.python.org/pypi/invenio-config-tugraz
@@ -27,6 +27,9 @@
.. image:: https://img.shields.io/coveralls/mb-wali/invenio-config-tugraz.svg .. image:: https://img.shields.io/coveralls/mb-wali/invenio-config-tugraz.svg
:target: https://coveralls.io/r/mb-wali/invenio-config-tugraz :target: https://coveralls.io/r/mb-wali/invenio-config-tugraz
.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
:target: https://github.com/psf/black
invenio module that adds tugraz configs. invenio module that adds tugraz configs.
Override configs from diffrent invenio modules to meet TU Graz requirement: Override configs from diffrent invenio modules to meet TU Graz requirement:

View File

@@ -10,7 +10,7 @@
import os import os
import sphinx.environment # import sphinx.environment
# -- General configuration ------------------------------------------------ # -- General configuration ------------------------------------------------
@@ -18,37 +18,37 @@ import sphinx.environment
# needs_sphinx = '1.0' # needs_sphinx = '1.0'
# Do not warn on external images. # Do not warn on external images.
suppress_warnings = ['image.nonlocal_uri'] suppress_warnings = ["image.nonlocal_uri"]
# Add any Sphinx extension module names here, as strings. They can be # Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones. # ones.
extensions = [ extensions = [
'sphinx.ext.autodoc', "sphinx.ext.autodoc",
'sphinx.ext.coverage', "sphinx.ext.coverage",
'sphinx.ext.doctest', "sphinx.ext.doctest",
'sphinx.ext.intersphinx', "sphinx.ext.intersphinx",
'sphinx.ext.viewcode', "sphinx.ext.viewcode",
] ]
# Add any paths that contain templates here, relative to this directory. # Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates'] templates_path = ["_templates"]
# The suffix(es) of source filenames. # The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string: # You can specify multiple suffix as a list of string:
# source_suffix = ['.rst', '.md'] # source_suffix = ['.rst', '.md']
source_suffix = '.rst' source_suffix = ".rst"
# The encoding of source files. # The encoding of source files.
# source_encoding = 'utf-8-sig' # source_encoding = 'utf-8-sig'
# The master toctree document. # The master toctree document.
master_doc = 'index' master_doc = "index"
# General information about the project. # General information about the project.
project = u'invenio-config-tugraz' project = u"invenio-config-tugraz"
copyright = u'2020, Mojib Wali' copyright = u"2020, Mojib Wali"
author = u'Mojib Wali' author = u"Mojib Wali"
# 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
@@ -58,11 +58,14 @@ author = u'Mojib Wali'
# Get the version string. Cannot be done with import! # Get the version string. Cannot be done with import!
g = {} g = {}
with open(os.path.join(os.path.dirname(__file__), '..', with open(
'invenio_config_tugraz', 'version.py'), os.path.join(
'rt') as fp: os.path.dirname(__file__), "..", "invenio_config_tugraz", "version.py"
),
"rt",
) as fp:
exec(fp.read(), g) exec(fp.read(), g)
version = g['__version__'] version = g["__version__"]
# The full version, including alpha/beta/rc tags. # The full version, including alpha/beta/rc tags.
release = version release = version
@@ -100,7 +103,7 @@ exclude_patterns = []
# show_authors = False # show_authors = False
# The name of the Pygments (syntax highlighting) style to use. # The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx' pygments_style = "sphinx"
# A list of ignored prefixes for module index sorting. # A list of ignored prefixes for module index sorting.
# modindex_common_prefix = [] # modindex_common_prefix = []
@@ -113,19 +116,19 @@ todo_include_todos = False
# -- Options for HTML output ---------------------------------------------- # -- Options for HTML output ----------------------------------------------
html_theme = 'alabaster' html_theme = "alabaster"
html_theme_options = { html_theme_options = {
'description': 'invenio module that adds tugraz configs.', "description": "invenio module that adds tugraz configs.",
'github_user': 'inveniosoftware', "github_user": "TU Graz",
'github_repo': 'invenio-config-tugraz', "github_repo": "invenio-config-tugraz",
'github_button': False, "github_button": False,
'github_banner': True, "github_banner": True,
'show_powered_by': False, "show_powered_by": False,
'extra_nav_links': { "extra_nav_links": {
'invenio-config-tugraz@GitHub': 'https://github.com/mb-wali/invenio-config-tugraz', "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-tugraz@PyPI": "https://pypi.python.org/pypi/invenio-config-tugraz/",
} },
} }
# The theme to use for HTML and HTML Help pages. See the documentation for # The theme to use for HTML and HTML Help pages. See the documentation for
@@ -175,12 +178,12 @@ html_theme_options = {
# Custom sidebar templates, maps document names to template names. # Custom sidebar templates, maps document names to template names.
html_sidebars = { html_sidebars = {
'**': [ "**": [
'about.html', "about.html",
'navigation.html', "navigation.html",
'relations.html', "relations.html",
'searchbox.html', "searchbox.html",
'donate.html', "donate.html",
] ]
} }
@@ -229,20 +232,17 @@ html_sidebars = {
# html_search_scorer = 'scorer.js' # html_search_scorer = 'scorer.js'
# Output file base name for HTML help builder. # Output file base name for HTML help builder.
htmlhelp_basename = 'invenio-config-tugraz_namedoc' htmlhelp_basename = "invenio-config-tugraz_namedoc"
# -- Options for LaTeX output --------------------------------------------- # -- Options for LaTeX output ---------------------------------------------
latex_elements = { latex_elements = {
# The paper size ('letterpaper' or 'a4paper'). # The paper size ('letterpaper' or 'a4paper').
# 'papersize': 'letterpaper', # 'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt'). # The font size ('10pt', '11pt' or '12pt').
# 'pointsize': '10pt', # 'pointsize': '10pt',
# Additional stuff for the LaTeX preamble. # Additional stuff for the LaTeX preamble.
# 'preamble': '', # 'preamble': '',
# Latex figure (float) alignment # Latex figure (float) alignment
# 'figure_align': 'htbp', # 'figure_align': 'htbp',
} }
@@ -251,8 +251,13 @@ latex_elements = {
# (source start file, target name, title, # (source start file, target name, title,
# author, documentclass [howto, manual, or own class]). # author, documentclass [howto, manual, or own class]).
latex_documents = [ latex_documents = [
(master_doc, 'invenio-config-tugraz.tex', u'invenio-config-tugraz Documentation', (
u'Mojib Wali', 'manual'), master_doc,
"invenio-config-tugraz.tex",
u"invenio-config-tugraz Documentation",
u"Mojib Wali",
"manual",
),
] ]
# The name of an image file (relative to this directory) to place at the top of # The name of an image file (relative to this directory) to place at the top of
@@ -281,8 +286,13 @@ latex_documents = [
# One entry per manual page. List of tuples # One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section). # (source start file, name, description, authors, manual section).
man_pages = [ man_pages = [
(master_doc, 'invenio-config-tugraz', u'invenio-config-tugraz Documentation', (
[author], 1) master_doc,
"invenio-config-tugraz",
u"invenio-config-tugraz Documentation",
[author],
1,
)
] ]
# If true, show URL addresses after external links. # If true, show URL addresses after external links.
@@ -295,9 +305,15 @@ man_pages = [
# (source start file, target name, title, author, # (source start file, target name, title, author,
# dir menu entry, description, category) # dir menu entry, description, category)
texinfo_documents = [ texinfo_documents = [
(master_doc, 'invenio-config-tugraz', u'invenio-config-tugraz Documentation', (
author, 'invenio-config-tugraz', 'invenio module that adds tugraz configs.', master_doc,
'Miscellaneous'), "invenio-config-tugraz",
u"invenio-config-tugraz Documentation",
author,
"invenio-config-tugraz",
"invenio module that adds tugraz configs.",
"Miscellaneous",
),
] ]
# Documents to append as an appendix to all manuals. # Documents to append as an appendix to all manuals.
@@ -315,10 +331,10 @@ 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),
# 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),
} }
# Autodoc configuraton. # Autodoc configuraton.
autoclass_content = 'both' autoclass_content = "both"

View File

@@ -8,8 +8,8 @@
"""invenio module that adds tugraz configs.""" """invenio module that adds tugraz configs."""
from .ext import invenioconfigtugraz from .ext import InvenioConfigTugraz
from .generators import RecordIp from .generators import RecordIp
from .version import __version__ from .version import __version__
__all__ = ('__version__', 'invenioconfigtugraz', 'RecordIp') __all__ = ("__version__", "InvenioConfigTugraz", "RecordIp")

View File

@@ -31,46 +31,47 @@ INVENIO_CONFIG_TUGRAZ_IP_RANGES =
# =========== # ===========
# See https://invenio-app.readthedocs.io/en/latest/configuration.html # See https://invenio-app.readthedocs.io/en/latest/configuration.html
APP_ALLOWED_HOSTS = ['0.0.0.0', APP_ALLOWED_HOSTS = [
'localhost', "0.0.0.0",
'127.0.0.1', "localhost",
'invenio-dev01.tugraz.at', "127.0.0.1",
'invenio-test.tugraz.at' "invenio-dev01.tugraz.at",
"invenio-test.tugraz.at",
] ]
"""Allowed Hosts""" """Allowed Hosts"""
APP_DEFAULT_SECURE_HEADERS = { APP_DEFAULT_SECURE_HEADERS = {
'content_security_policy': { "content_security_policy": {
'default-src': [ "default-src": [
"'self'", "'self'",
'fonts.googleapis.com', "fonts.googleapis.com",
'*.gstatic.com', "*.gstatic.com",
'data:', "data:",
"'unsafe-inline'", "'unsafe-inline'",
"'unsafe-eval'", "'unsafe-eval'",
"blob:", "blob:",
], ],
}, },
'content_security_policy_report_only': False, "content_security_policy_report_only": False,
'content_security_policy_report_uri': None, "content_security_policy_report_uri": None,
'force_file_save': False, "force_file_save": False,
'force_https': True, "force_https": True,
'force_https_permanent': False, "force_https_permanent": False,
'frame_options': 'sameorigin', "frame_options": "sameorigin",
'frame_options_allow_from': None, "frame_options_allow_from": None,
'session_cookie_http_only': True, "session_cookie_http_only": True,
'session_cookie_secure': True, "session_cookie_secure": True,
'strict_transport_security': True, "strict_transport_security": True,
'strict_transport_security_include_subdomains': True, "strict_transport_security_include_subdomains": True,
'strict_transport_security_max_age': 31556926, # One year in seconds "strict_transport_security_max_age": 31556926, # One year in seconds
'strict_transport_security_preload': False, "strict_transport_security_preload": False,
} }
# Invenio-Mail # Invenio-Mail
# =========== # ===========
# See https://invenio-mail.readthedocs.io/en/latest/configuration.html # See https://invenio-mail.readthedocs.io/en/latest/configuration.html
MAIL_SERVER = 'localhost' MAIL_SERVER = "localhost"
"""Domain ip where mail server is running.""" """Domain ip where mail server is running."""
SECURITY_EMAIL_SENDER = "info@invenio-test.tugraz.at" SECURITY_EMAIL_SENDER = "info@invenio-test.tugraz.at"
@@ -102,38 +103,44 @@ Set this to False when sending actual emails.
# ] # ]
# REST_ENABLE_CORS = True # REST_ENABLE_CORS = True
# Invenio-userprofiles
# Invenio-shibboleth
# =========== # ===========
# See https://invenio-shibboleth.readthedocs.io/en/latest/configuration.html # See https://invenio-userprofiles.readthedocs.io/en/latest/configuration.html
USERPROFILES_EXTEND_SECURITY_FORMS = True USERPROFILES_EXTEND_SECURITY_FORMS = False
"""Set True in order to register user_profile. """Set True in order to register user_profile.
This also forces user to add username and fullname This also forces user to add username and fullname
when register. when register.
""" """
USERPROFILES_EMAIL_ENABLED = False
"""Exclude the user email in the profile form."""
# Invenio-shibboleth
# ===========
# See https://invenio-shibboleth.readthedocs.io/en/latest/configuration.html
SSO_SAML_IDPS = {} SSO_SAML_IDPS = {}
"""Configuration of IDPS. Actual values can be find in to invenio.cfg file""" """Configuration of IDPS. Actual values can be find in to invenio.cfg file"""
SSO_SAML_DEFAULT_BLUEPRINT_PREFIX = '/shibboleth' SSO_SAML_DEFAULT_BLUEPRINT_PREFIX = "/shibboleth"
"""Base URL for the extensions endpoint.""" """Base URL for the extensions endpoint."""
SSO_SAML_DEFAULT_METADATA_ROUTE = '/metadata/<idp>' SSO_SAML_DEFAULT_METADATA_ROUTE = "/metadata/<idp>"
"""URL route for the metadata request.""" """URL route for the metadata request."""
"""This is also SP entityID https://domain/shibboleth/metadata/<idp>""" """This is also SP entityID https://domain/shibboleth/metadata/<idp>"""
SSO_SAML_DEFAULT_SSO_ROUTE = '/login/<idp>' SSO_SAML_DEFAULT_SSO_ROUTE = "/login/<idp>"
"""URL route for the SP login.""" """URL route for the SP login."""
SSO_SAML_DEFAULT_ACS_ROUTE = '/authorized/<idp>' SSO_SAML_DEFAULT_ACS_ROUTE = "/authorized/<idp>"
"""URL route to handle the IdP login request.""" """URL route to handle the IdP login request."""
SSO_SAML_DEFAULT_SLO_ROUTE = '/slo/<idp>' SSO_SAML_DEFAULT_SLO_ROUTE = "/slo/<idp>"
"""URL route for the SP logout.""" """URL route for the SP logout."""
SSO_SAML_DEFAULT_SLS_ROUTE = '/sls/<idp>' SSO_SAML_DEFAULT_SLS_ROUTE = "/sls/<idp>"
"""URL route to handle the IdP logout request.""" """URL route to handle the IdP logout request."""
# Invenio-accounts # Invenio-accounts

View File

@@ -8,12 +8,10 @@
"""invenio module that adds tugraz configs.""" """invenio module that adds tugraz configs."""
from flask_babelex import gettext as _
from . import config from . import config
class invenioconfigtugraz(object): class InvenioConfigTugraz(object):
"""invenio-config-tugraz extension.""" """invenio-config-tugraz extension."""
def __init__(self, app=None): def __init__(self, app=None):
@@ -24,10 +22,10 @@ class invenioconfigtugraz(object):
def init_app(self, app): def init_app(self, app):
"""Flask application initialization.""" """Flask application initialization."""
self.init_config(app) self.init_config(app)
app.extensions['invenio-config-tugraz'] = self app.extensions["invenio-config-tugraz"] = self
def init_config(self, app): def init_config(self, app):
"""Initialize configuration.""" """Initialize configuration."""
for k in dir(config): for k in dir(config):
if k.startswith('INVENIO_CONFIG_TUGRAZ_'): if k.startswith("INVENIO_CONFIG_TUGRAZ_"):
app.config.setdefault(k, getattr(config, k)) app.config.setdefault(k, getattr(config, k))

View File

@@ -202,13 +202,13 @@ class RecordIp(Generator):
These filters consist of additive queries mapping to what the current These filters consist of additive queries mapping to what the current
user should be able to retrieve via search. user should be able to retrieve via search.
""" """
return Q('match_all') return 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."""
# Get user IP # Get user IP
user_ip = request.remote_addr # pragma: no cover user_ip = request.remote_addr # pragma: no cover
# Checks if the user IP is among single IPs # Checks if the user IP is among single IPs
if user_ip in current_app.config['INVENIO_CONFIG_TUGRAZ_SINGLE_IP']: if user_ip in current_app.config["INVENIO_CONFIG_TUGRAZ_SINGLE_IP"]: # pragma: no cover
return True # pragma: no cover return True # pragma: no cover
return False # pragma: no cover return False # pragma: no cover

View File

@@ -49,8 +49,12 @@ Using Custom Generator for a policy:
Permissions for Invenio (RDM) Records. Permissions for Invenio (RDM) Records.
""" """
from invenio_records_permissions.generators import Admin, AnyUser, \ from invenio_records_permissions.generators import (
AnyUserIfPublic, Disable, RecordOwners Admin,
AnyUser,
AnyUserIfPublic,
RecordOwners,
)
from invenio_records_permissions.policies.base import BasePermissionPolicy from invenio_records_permissions.policies.base import BasePermissionPolicy
from .generators import RecordIp from .generators import RecordIp

View File

@@ -0,0 +1,25 @@
# German translations for invenio-config-tugraz.
# Copyright (C) 2020 Mojib Wali
# This file is distributed under the same license as the
# invenio-config-tugraz project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
msgid ""
msgstr ""
"Project-Id-Version: invenio-config-tugraz 0.1.5\n"
"Report-Msgid-Bugs-To: mojib.wali@tugraz.at\n"
"POT-Creation-Date: 2020-10-06 09:28+0200\n"
"PO-Revision-Date: 2020-10-06 09:28+0200\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: de\n"
"Language-Team: de <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.8.0\n"
#: invenio_config_tugraz/config.py:80
msgid "Welcome to RDM!"
msgstr ""

View File

@@ -0,0 +1,24 @@
# Translations template for invenio-config-tugraz.
# Copyright (C) 2020 Mojib Wali
# This file is distributed under the same license as the
# invenio-config-tugraz project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: invenio-config-tugraz 0.1.5\n"
"Report-Msgid-Bugs-To: mojib.wali@tugraz.at\n"
"POT-Creation-Date: 2020-10-06 09:28+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.8.0\n"
#: invenio_config_tugraz/config.py:80
msgid "Welcome to RDM!"
msgstr ""

View File

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

View File

@@ -7,6 +7,6 @@
# details. # details.
[pytest] [pytest]
addopts = --isort --pydocstyle --pycodestyle --doctest-glob="*.rst" --doctest-modules --cov=invenio_config_tugraz --cov-report=term-missing 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 testpaths = tests invenio_config_tugraz
live_server_scope = module live_server_scope = module

View File

@@ -7,10 +7,9 @@
# 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.
docker-services-cli up postgresql es redis python -m check_manifest --ignore ".*-requirements.txt"
python -m check_manifest --ignore ".travis-*" && \ python -m sphinx.cmd.build -qnNW docs docs/_build/html
python -m sphinx.cmd.build -qnNW docs docs/_build/html && \ docker-services-cli --verbose up es postgresql redis
docker-services-cli up es postgresql redis
python -m pytest python -m pytest
tests_exit_code=$? tests_exit_code=$?
docker-services-cli down docker-services-cli down

View File

@@ -37,3 +37,20 @@ output-dir = invenio_config_tugraz/translations/
[update_catalog] [update_catalog]
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]
multi_line_output = 3
include_trailing_comma = True
force_grid_wrap = 0
use_parentheses = True
ensure_newline_before_comments = True
line_length = 88
[pycodestyle]
ignore = E203,E501

View File

@@ -12,35 +12,36 @@ import os
from setuptools import find_packages, setup from setuptools import find_packages, setup
readme = open('README.rst').read() readme = open("README.rst").read()
history = open('CHANGES.rst').read() history = open("CHANGES.rst").read()
tests_require = [ tests_require = [
'pytest-invenio>=1.4.0', "pytest-invenio>=1.4.0",
"SQLAlchemy-Utils>=0.33.1,<0.36",
"invenio-rdm-records~=0.20.8",
"invenio-search[elasticsearch7]>=1.4.0",
] ]
extras_require = { extras_require = {
'docs': [ "docs": [
'Sphinx>=1.5.1', "Sphinx>=1.5.1",
], ],
'tests': tests_require, "tests": tests_require,
} }
extras_require['all'] = [] extras_require["all"] = []
for reqs in extras_require.values(): for reqs in extras_require.values():
extras_require['all'].extend(reqs) extras_require["all"].extend(reqs)
setup_requires = [ setup_requires = [
'Babel>=1.3', "Babel>=1.3",
'pytest-runner>=3.0.0,<5', "pytest-runner>=3.0.0,<5",
] ]
install_requires = [ install_requires = [
'Flask-BabelEx>=0.9.4', "Flask-BabelEx>=0.9.4",
'elasticsearch_dsl>=7.2.1', "elasticsearch_dsl>=7.2.1",
'invenio-rdm-records~=0.18.3', "sqlalchemy-continuum>=1.3.11",
'invenio_search>=1.3.1',
] ]
packages = find_packages() packages = find_packages()
@@ -48,33 +49,33 @@ packages = find_packages()
# Get the version string. Cannot be done with import! # Get the version string. Cannot be done with import!
g = {} g = {}
with open(os.path.join('invenio_config_tugraz', 'version.py'), 'rt') as fp: with open(os.path.join("invenio_config_tugraz", "version.py"), "rt") as fp:
exec(fp.read(), g) exec(fp.read(), g)
version = g['__version__'] version = g["__version__"]
setup( setup(
name='invenio-config-tugraz', name="invenio-config-tugraz",
version=version, version=version,
description=__doc__, description=__doc__,
long_description=readme + '\n\n' + history, long_description=readme + "\n\n" + history,
keywords='invenio, config, Tu Graz', keywords="invenio, config, Tu Graz",
license='MIT', license="MIT",
author='Mojib Wali', author="Mojib Wali",
author_email='mojib.wali@tugraz.at', author_email="mb_wali@hotmail.com",
url='https://github.com/mb-wali/invenio-config-tugraz', url="https://github.com/tu-graz-library/invenio-config-tugraz",
packages=packages, packages=packages,
zip_safe=False, zip_safe=False,
include_package_data=True, include_package_data=True,
platforms='any', platforms="any",
entry_points={ entry_points={
'invenio_base.apps': [ "invenio_base.apps": [
'invenio_config_tugraz = invenio_config_tugraz:invenioconfigtugraz', "invenio_config_tugraz = invenio_config_tugraz:InvenioConfigTugraz",
], ],
'invenio_i18n.translations': [ "invenio_i18n.translations": [
'messages = invenio_config_tugraz', "messages = invenio_config_tugraz",
], ],
'invenio_config.module': [ "invenio_config.module": [
'invenio_config_tugraz = invenio_config_tugraz.config', "invenio_config_tugraz = invenio_config_tugraz.config",
], ],
}, },
extras_require=extras_require, extras_require=extras_require,
@@ -82,17 +83,17 @@ setup(
setup_requires=setup_requires, setup_requires=setup_requires,
tests_require=tests_require, tests_require=tests_require,
classifiers=[ classifiers=[
'Environment :: Web Environment', "Environment :: Web Environment",
'Intended Audience :: Developers', "Intended Audience :: Developers",
'License :: OSI Approved :: MIT License', "License :: OSI Approved :: MIT License",
'Operating System :: OS Independent', "Operating System :: OS Independent",
'Programming Language :: Python', "Programming Language :: Python",
'Topic :: Internet :: WWW/HTTP :: Dynamic Content', "Topic :: Internet :: WWW/HTTP :: Dynamic Content",
'Topic :: Software Development :: Libraries :: Python Modules', "Topic :: Software Development :: Libraries :: Python Modules",
'Programming Language :: Python :: 3', "Programming Language :: Python :: 3",
'Programming Language :: Python :: 3.6', "Programming Language :: Python :: 3.6",
'Programming Language :: Python :: 3.7', "Programming Language :: Python :: 3.7",
'Programming Language :: Python :: 3.8', "Programming Language :: Python :: 3.8",
'Development Status :: 3 - Alpha', "Development Status :: 3 - Alpha",
], ],
) )

View File

@@ -12,17 +12,19 @@ See https://pytest-invenio.readthedocs.io/ for documentation on which test
fixtures are available. fixtures are available.
""" """
import os
import shutil import shutil
import tempfile import tempfile
import pytest import pytest
from flask import Flask from flask import Flask
from flask_babelex import Babel from flask_babelex import Babel
from invenio_db import InvenioDB, db
from invenio_config_tugraz import invenioconfigtugraz from invenio_config_tugraz import InvenioConfigTugraz
@pytest.fixture(scope='module') @pytest.fixture(scope="module")
def celery_config(): def celery_config():
"""Override pytest-invenio fixture. """Override pytest-invenio fixture.
@@ -31,13 +33,40 @@ def celery_config():
return {} return {}
@pytest.fixture(scope='module') @pytest.fixture()
def create_app(instance_path): def create_app(request):
"""Application factory fixture.""" """Basic Flask application."""
def factory(**config): instance_path = tempfile.mkdtemp()
app = Flask('testapp', instance_path=instance_path) app = Flask("testapp")
app.config.update(**config) DB = os.getenv("SQLALCHEMY_DATABASE_URI", "sqlite://")
app.config.update(
INVENIO_CONFIG_TUGRAZ_SINGLE_IP=["127.0.0.1", "127.0.0.2"],
INVENIO_CONFIG_TUGRAZ_IP_RANGES=[
["127.0.0.2", "127.0.0.99"],
["127.0.1.3", "127.0.1.5"],
],
SQLALCHEMY_DATABASE_URI=DB,
SQLALCHEMY_TRACK_MODIFICATIONS=False,
)
Babel(app) Babel(app)
invenioconfigtugraz(app) InvenioConfigTugraz(app)
InvenioDB(app)
with app.app_context():
db_url = str(db.engine.url)
if db_url != "sqlite://" and not database_exists(db_url):
create_database(db_url)
db.create_all()
def teardown():
with app.app_context():
db_url = str(db.engine.url)
db.session.close()
if db_url != "sqlite://":
drop_database(db_url)
shutil.rmtree(instance_path)
request.addfinalizer(teardown)
app.test_request_context().push()
return app return app
return factory

View File

@@ -6,12 +6,15 @@
# 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.
"""Test Generators."""
from invenio_config_tugraz.generators import RecordIp from invenio_config_tugraz.generators import RecordIp
def test_recordip(): def test_recordip():
"""Test Generator RecordIp."""
generator = RecordIp() generator = RecordIp()
assert generator.needs() == [] assert generator.needs() == []
assert generator.excludes() == [] assert generator.excludes() == []
assert generator.query_filter().to_dict() == {'match_all': {}} assert generator.query_filter().to_dict() == {"match_all": {}}

View File

@@ -10,23 +10,24 @@
from flask import Flask from flask import Flask
from invenio_config_tugraz import invenioconfigtugraz from invenio_config_tugraz import InvenioConfigTugraz
def test_version(): def test_version():
"""Test version import.""" """Test version import."""
from invenio_config_tugraz import __version__ from invenio_config_tugraz import __version__
assert __version__ assert __version__
def test_init(): def test_init():
"""Test extension initialization.""" """Test extension initialization."""
app = Flask('testapp') app = Flask("testapp")
ext = invenioconfigtugraz(app) ext = InvenioConfigTugraz(app)
assert 'invenio-config-tugraz' in app.extensions assert "invenio-config-tugraz" in app.extensions
app = Flask('testapp') app = Flask("testapp")
ext = invenioconfigtugraz() ext = InvenioConfigTugraz()
assert 'invenio-config-tugraz' not in app.extensions assert "invenio-config-tugraz" not in app.extensions
ext.init_app(app) ext.init_app(app)
assert 'invenio-config-tugraz' in app.extensions assert "invenio-config-tugraz" in app.extensions