Skip to content

Commit

Permalink
Merge pull request #538 from grycap/oaipmh
Browse files Browse the repository at this point in the history
Oai-pmh protocol finished
  • Loading branch information
micafer authored May 8, 2024
2 parents cc5fd4e + be3be7e commit 715fb5b
Show file tree
Hide file tree
Showing 8 changed files with 913 additions and 1 deletion.
17 changes: 17 additions & 0 deletions app/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
from flask_apscheduler import APScheduler
from flask_wtf.csrf import CSRFProtect, CSRFError
from toscaparser.tosca_template import ToscaTemplate
from app.oaipmh.oai import OAI


def create_app(oidc_blueprint=None):
Expand Down Expand Up @@ -1492,6 +1493,22 @@ def manage_vault_info():

return redirect(url_for('manage_creds'))

@app.route('/oai', methods=['GET', 'POST'])
def oai_pmh():
if not settings.oaipmh_repo_name:
return make_response("OAI-PMH not enabled.", 404, {'Content-Type': 'text/plain'})

oai = OAI(settings.oaipmh_repo_name, request.base_url, settings.oaipmh_repo_description,
settings.oaipmh_repo_base_identifier_url)

metadata_dict = {}
for name, tosca in toscaInfo.items():
metadata = tosca["metadata"]
metadata_dict[name] = metadata

response_xml = oai.processRequest(request, metadata_dict)
return make_response(response_xml, 200, {'Content-Type': 'text/xml'})

@app.route('/reconfigure/<infid>')
@authorized_with_valid_token
def reconfigure(infid=None):
Expand Down
5 changes: 4 additions & 1 deletion app/config-sample.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,8 @@
"ENABLE_EXTERNAL_VAULT": false,
"VO_MAP": {},
"EXTRA_AUTH": {},
"HIDE_TOSCA_TAGS": []
"HIDE_TOSCA_TAGS": [],
"OAIPMH_REPO_NAME": "IM Dashboard",
"OAIPMH_REPO_DESCRIPTION": "IM Dashboard OAI-PMH repository",
"OAIPMH_REPO_BASE_IDENTIFIER_URL": "https://github.com/grycap/tosca/blob/main/templates/"
}
Empty file added app/oaipmh/__init__.py
Empty file.
100 changes: 100 additions & 0 deletions app/oaipmh/errors.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
#
# IM - Infrastructure Manager Dashboard
# Copyright (C) 2023 - GRyCAP - Universitat Politecnica de Valencia
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
from lxml.etree import Element # nosec


class Errors():

@staticmethod
def badVerb():
# Create the root element with the specified verb
error = Element('error')
error.set('code', 'badVerb')
error.text = 'Value of the verb argument is not a legal OAI-PMH verb, \
the verb argument is missing, or the verb argument is repeated.'

return error

@staticmethod
def badArgument():
# Create the root element with the specified verb
error = Element('error')
error.set('code', 'badArgument')
error.text = 'The request includes illegal arguments, is missing required \
arguments, includes a repeated argument, or values for arguments have an illegal syntax.'

return error

@staticmethod
def cannotDisseminateFormat():
# Create the root element with the specified verb
error = Element('error')
error.set('code', 'cannotDisseminateFormat')
error.text = 'The metadata format identified by the value given for the metadataPrefix \
argument is not supported by the item or by the repository.'

return error

@staticmethod
def idDoesNotExist():
# Create the root element with the specified verb
error = Element('error')
error.set('code', 'idDoesNotExist')
error.text = 'The value of the identifier argument is unknown or illegal in this repository.'

return error

@staticmethod
def badResumptionToken():
# Create the root element with the specified verb
error = Element('error')
error.set('code', 'badResumptionToken')
error.text = 'The value of the resumptionToken argument is invalid or expired.'

return error

@staticmethod
def noRecordsMatch():
# Create the root element with the specified verb
error = Element('error')
error.set('code', 'noRecordsMatch')
error.text = 'The combination of the values of the from, until, set, and metadataPrefix \
arguments results in an empty list.'

return error

@staticmethod
def noMetadataFormats():
# Create the root element with the specified verb
error = Element('error')
error.set('code', 'noMetadataFormats')
error.text = 'There are no metadata formats available for the specified item.'

return error

@staticmethod
def noSetHierarchy():
# Create the root element with the specified verb
error = Element('error')
error.set('code', 'noSetHierarchy')
error.text = 'The repository does not support sets'

return error
Loading

0 comments on commit 715fb5b

Please sign in to comment.