Invenio Blog

Follow news and updates on Invenio world

We are proud to announce the release of Invenio v3.0.0. Invenio has been completely rewritten from scratch with a radically improved architecture and technical implementation. Invenio 3 is now a framework, like a Swiss Army knife, complete with battle-tested, safe and secure modules providing all the features you need to build and run a trusted digital repository.

Whilst Invenio 3 is officially released to the world today, in reality it has already been relied upon in large-scale production systems for more than 1.5 years on sites such as:

Compatibilities

Python compatibility

Invenio v3.0 supports Python 2.7, 3.5, 3.6. We highly recommend only using the latest official release in each series.

Python 2.7 end-of-life is scheduled for April 2020. Invenio will only support Python 2.7 until that date. We highly recommend that all new projects are started on the latest available Python 3 version.

Elasticsearch compatibility

Invenio v3.0 supports Elasticsearch 2, 5 and 6.

Elasticsearch v2 has reached end-of-life (February 2018) and Invenio v3.0 is the last release to support Elasticsearch v2.

PostgreSQL compatibility

MySQL compatibility

Invenio v3.0 supports MySQL 5.6+.

Deprecations

AMD/RequireJS

Invenio v3.0's current static assets management system is based on e.g. RequireJS will be replaced with Webpack.
We expect this work to be ready for Invenio v3.1, and thus we are already deprecating the current support. Specifically this
means that Invenio-Assets and Invenio-Theme will change significantly in Invenio v3.1. We would have liked to
already have this ready for this v3.0 release, but unfortunately it was time-wise not possible.

AngularJS

Invenio v3.0 comes with one AngularJS 1.4 application (Invenio-Search-JS). AngularJS is by now already outdated, and we are
planning a rewrite of the application in another JavaScript framework that is currently in process of being selected.
Essentially this means that you should not extend Invenio-Search-JS at this point, since it will change significantly.

Maintenance policy

Invenio v3.0 will be supported with bug and security fixes until the release of
Invenio v3.2 and minimum one year.

We aim at one Invenio release with new features every 6 months. We expect
upgrades between minor versions (e.g. v3.1 to v3.2) to be fairly straight-forward
as in most cases only new features are added.

Overview

inveniosoftware.org was moved to Lektor static CMS
and is now also hosted on GitHub Pages.

Cookiecutter templates for Invenio instances and Invenio data models where
finalised and made part of the "Getting started" guide.

Invenio v3.0.0 Release Candidate 2 was released.

Flask v1.0 support

Releases

invenio-access v1.0.1

invenio-accounts v1.0.1

invenio-base v1.0.1

invenio-db v1.0.1

invenio-formatter v1.0.1

invenio-oauth2server v1.0.1

invenio-records-rest v1.1.0

invenio-userprofiles v1.0.1

pytest-invenio v1.0.2

List of all changes

cookiecutter-invenio-datamodel:

Fixing, testing, documenting and cleaning.

cookiecutter-invenio-instance:

Fixing, testing, documenting and cleaning.

The development server is now by default running SSL thanks to the
recently release Flask v1.0.

invenio-access:

Fixed annoying warning message.

invenio-accounts:

Fixed build failure due to Flask-CeleryExt version.

invenio-base:

Added support for blueprint factory functions in the
invenio_base.blueprints/invenio_base.api_blueprints entry point
groups. In addition to specifying an import path to an already created
blueprint, you can now specify an import path of a blueprint factory
function with the signature
create_blueprint(app), that will create and return a blueprint. This
allows moving dynamic blueprint creation from the extension
initialization phase to the blueprint registration phase.

invenio-formatter:

Fixed issue where badges would be cached wrongly.

invenio-jsonschemas:

Fixed build error related to Flask v1.0

invenio-oaiserver:

Fixed build error related to Flask v1.0

invenio-oauth2server:

Fixed build error related to Flask v1.0

invenio-oauth2server:

Fixed build error related to Flask v1.0

invenio-oauthclient:

Fixed build error related to Flask v1.0

invenio-records-rest:

Added marshmallow fields used for record deserialization.

Added support for other Invenio extensions to auto-register REST API
record endpoints.

Fixed build error related to Flask v1.0

invenio-rest:

Fixed build error related to Flask v1.0

invenio-userprofiles:

Fixed build error related to Flask v1.0

invenio:

Documentation updates.

inveniosoftware.org:

Rewritten using Lektor Static CMS system.

Retargeted website to pass the message that Invenio is now a framework.

This sprint was focused on releasing the Invenio v3.0.0 Release Candidate 1.

As a result of 95 developer days, 485 commits and 88k lines touched (33k additions and 55k deletions):

Invenio v3.0.0 Release Candidate 1 was released.

License has been changed from GPL to MIT for ~30 repositories (part of v3RC1).

Documentation for API authentication in Invenio was added (in OAuth2Server).

Elasticsearch v6 support was added.

Releases

invenio: v3.0.0rc1

invenio-access: v1.0.0

invenio-accounts: v1.0.0

invenio-admin: v1.0.0

invenio-app: v1.0.0

invenio-assets: v1.0.0

invenio-base: v1.0.0

invenio-cache: v1.0.0

invenio-celery: v1.0.0

invenio-config: v1.0.0

invenio-db: v1.0.0

invenio-formatter: v1.0.0

invenio-i18n: v1.0.0

invenio-indexer: v1.0.0

invenio-jsonschemas: v1.0.0

invenio-logging: v1.0.0

invenio-mail: v1.0.0

invenio-oaiserver: v1.0.0

invenio-oauth2server: v1.0.0

invenio-oauthclient: v1.0.0

invenio-pidstore: v1.0.0

invenio-records: v1.0.0

invenio-records-rest: v1.0.0

invenio-records-ui: v1.0.0

invenio-rest: v1.0.0

invenio-search: v1.0v.0

invenio-search-ui: v1.0.0

invenio-theme: v1.0.0

invenio-userprofiles: v1.0.0

dcxml: v0.1.1

citeproc-py-styles: v0.1.1

pytest-invenio: v1.0.0

invenio-marc21: v1.0.0a8

Backward incompatible changes

invenio-oauthclient:

Added creation/modification timestamps to database models. Requires upgrade of database using the included Alembic recipe. The recipe will set the creation/modification timestamp to the current date + time (same value for all rows).

invenio-oaiserver:

XSL stylesheet that allow nice rendering of the OAI-PMH feed have been removed as it was GPL licensed. Documentation describes how to add it back.

List of all changes:

All packages:

License change and general repository clean up.

cookiecutter-invenio-datamodel:

New template for bootstrapping data models in Invenio.

cookiecutter-invenio-instance:

New template for bootstrapping new instances.

invenio-accounts:

Removed Invenio-Admin dependency.

invenio-base:

Documentation for CLI commands.

invenio-config:

Documentation for how to set complex values in environment variables.

invenio-db:

Changed dependency psycopg2 to psycopg2-binary due to warning message.

Elasticsearch 5 support

Search, Indexer, Records-REST, OAIServer and MARC21 have all been upgraded to
support Elasticsearch v2 and v5. Elasticsearch v6 is not yet support due to the
elasticsearch-dsl package not yet supporting v6 (support already merged in master branch but not yet released).

Other Invenio packages have not yet been upgraded to Elasticsearch v5. E.g.
Records-Files, OpenAIRE, Stats, Collections, OpenDefinition, Query-Parser have
not yet been tested with Elasticsearch v5.

Choosing version

You will need to know at install-time which version of Elasticsearch you'd like
to use. For instance to use Elasticsearch 5 you need to install Invenio-Search
like this:

$ pip install invenio-search[elasticsearch5]

Mappings

Due to the differences between Elasticsearch versions, we have opted for
version-specific mappings. This means that Invenio modules must provide a
mapping per Elasticsearch version they wish to support. E.g. today, the mapping
is placed in a directory like e.g.:

Most common change from v2 to v5 is the change from string type to either text or keyword type.

Update docs/requirements.txt by adding elasticsearch5 as an extra requirement to ensure ReadTheDocs builds will be fine.

Fix any API specific calls (see below).

Canonical way of checking for ES version.

from elasticsearch import VERSION as ES_VERSION
if ES_VERSION[0] == 2:
# ...

Completion Suggesters

The Completion Suggesters have changed from v2 to v5. In v2, suggesters
supported an index-time payloads option, which was used to store and
return metadata with suggestions. In v5, completions are now returned with
their associated document in the _source field.

If you have completion suggesters for v2 you will need to make them compatible
with v5. This involves:

API clients should read metadata from _source instead of payload. For
v2 the payload is copied to _source by Records-REST, which allows you to
already now upgrade API clients to use the new _source field.

On indexing, you need to add the payload only for v2.

Elasticsearch v2 end-of-life

Elasticsearch v2 reaches end of life in
February 2018. Elasticsearch v2 support in
Invenio will be removed in Invenio v3.1, thus Invenio v3.0 will be released
with Elasticsearch v2 support and be maintained until v3.0 end of life
(currently TBD).

As a result of 89 developer days, 126 commits and 6.6k lines touched (4.7k additions and 1.8k deletions) auth bundle has been stabilized and released in beta version (Accounts, Access, Profiles, OAuthClient and OAuth2Server).

List of changes:

DoJSON (v1.3.2):

Remove 'Undo' is experimental warning

Flask-Menu (v0.6.0):

Python 3 warnings fixes

Invenio

Fixed login problem

Invenio-Access (v1.0.0b1):

Reviewed module and fixed data model issues.

Deprecated DynamicPermission in favor of Permission (aligning with Flask-Principal's deny by default behavior)

Added system roles with support for any user and authenticated user (could be extended to support IP-based access control). ActionUsers was previously used for similar feature by setting user_id to None but this is no longer possible.