Skip to content
This repository has been archived by the owner on Dec 7, 2020. It is now read-only.

Commit

Permalink
examples: print record details addition
Browse files Browse the repository at this point in the history
* Modifies the example app to show the record inside a template.

Signed-off-by: Leonardo Rossi <leonardo.r@cern.ch>
  • Loading branch information
Leonardo Rossi committed Feb 24, 2016
1 parent 8e49481 commit 72681c6
Show file tree
Hide file tree
Showing 8 changed files with 260 additions and 13 deletions.
1 change: 1 addition & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ charset = utf-8
indent_size = 4
# isort plugin configuration
known_first_party = invenio_marc21
known_third_party = dojson
multi_line_output = 2
default_section = THIRDPARTY

Expand Down
2 changes: 2 additions & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,5 @@ recursive-include invenio_marc21 *.html
recursive-include invenio_marc21 *.po *.pot *.mo
recursive-include invenio_marc21 *.json
recursive-include tests *.py
recursive-include examples *.html
recursive-include examples *.css
94 changes: 84 additions & 10 deletions examples/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,34 +23,108 @@
# as an Intergovernmental Organization or submit itself to any jurisdiction.


"""Minimal Flask application example for development.
r"""Minimal Flask application example for development.
Run example development server:
Usage:
.. code-block:: console
1. Install oauthclient:
.. code-block:: console
cdvirtualenv src/invenio-marc21
pip install -e .[all]
2. Create database and tables:
.. code-block:: console
$ cd examples
$ flask -a app.py db init
$ flask -a app.py db create
You can find the database in `examples/app.db`.
3. Load demo records from invenio-records (see
invenio_records/data/marc21/bibliographic.xml):
.. code-block:: console
$ wget "https://github.com/inveniosoftware/invenio-records/raw/\
master/invenio_records/data/marc21/bibliographic.xml"
$ dojson -i bibliographic.xml -l marcxml do marc21 | \
flask -a app.py records create
$ flask -a app.py fixtures records
4. Run the development server:
.. code-block:: console
flask -a app.py run -h 0.0.0.0 -p 5000
5. Open in a browser the page `http://0.0.0.0:5000/example/[:pid]`.
E.g. open `http://0.0.0.0:5000/example/1`
$ cd examples
$ flask -a app.py --debug run
"""

from __future__ import absolute_import, print_function

from flask import Flask
import os

from flask import Blueprint, Flask, render_template
from flask_babelex import Babel
from flask_cli import FlaskCLI
from invenio_db import InvenioDB, db
from invenio_pidstore.minters import recid_minter
from invenio_pidstore.models import PersistentIdentifier
from invenio_records import InvenioRecords
from invenio_records.models import RecordMetadata
from invenio_search import InvenioSearch

from invenio_marc21 import InvenioMARC21

# Create Flask application
app = Flask(__name__)
app.config.update(
ELASTICSEARCH_HOST="localhost:9200",
SEARCH_ELASTIC_HOSTS="localhost:9200",
SEARCH_ELASTIC_KEYWORD_MAPPING={None: ['_all']},
SQLALCHEMY_DATABASE_URI=os.getenv('SQLALCHEMY_DATABASE_URI',
'sqlite:///app.db'),
)

Babel(app)
FlaskCLI(app)
InvenioDB(app)
InvenioRecords(app)
InvenioSearch(app)
InvenioMARC21(app)


blueprint = Blueprint(
'invenio_marc21',
__name__,
template_folder='templates',
static_folder='static',
)


@app.route('/example/<string:index>', methods=['GET'])
def example(index):
"""Index page."""
pid = PersistentIdentifier.query.filter_by(id=index).one()
record = RecordMetadata.query.filter_by(id=pid.object_uuid).first()

return render_template("app/detail.html", record=record.json, pid=pid,
title="Demosite Invenio Org")


@app.cli.group()
def fixtures():
"""Initialize example data."""


@fixtures.command()
def records():
"""Load fixtures."""
with db.session.begin_nested():
for record in RecordMetadata.query.all():
recid_minter(record.id, record.json)
db.session.commit()
24 changes: 24 additions & 0 deletions examples/static/app/css/app.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
h1.title{
background-color: #7775f5;
color: #ebebeb;
text-align: center;
}
.container{
display: inline-block;
width: 100%;
margin-bottom: 1em;
}
h2 small{
color: #9f9393;
}
.panel{
border-top: 1px solid;
color: #a69e9e;
}
.extra-info{
float: right;
background-image: linear-gradient(to bottom, #e8e8e8 0px, #f5f5f5 100%);
line-height: 1.5em;
padding: 1em;
margin: 1.5em 1em;
}
30 changes: 30 additions & 0 deletions examples/templates/app/detail.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{# -*- coding: utf-8 -*-
#
# This file is part of Invenio.
# Copyright (C) 2016 CERN.
#
# Invenio is free software; you can redistribute it
# and/or modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# Invenio is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Invenio; if not, write to the
# Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
# MA 02111-1307, USA.
#
# In applying this license, CERN does not
# waive the privileges and immunities granted to it by virtue of its status
# as an Intergovernmental Organization or submit itself to any jurisdiction.
-#}

<link rel="stylesheet" href="/static/app/css/app.css"></link>

<h1 class=title>{{ title }}</h1>

{%- extends "app/detail_base.html" -%}
115 changes: 115 additions & 0 deletions examples/templates/app/detail_base.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
{# -*- coding: utf-8 -*-
#
# This file is part of Invenio.
# Copyright (C) 2016 CERN.
#
# Invenio is free software; you can redistribute it
# and/or modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# Invenio is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Invenio; if not, write to the
# Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
# MA 02111-1307, USA.
#
# In applying this license, CERN does not
# waive the privileges and immunities granted to it by virtue of its status
# as an Intergovernmental Organization or submit itself to any jurisdiction.
-#}

{%- macro record_content(data) %}
{% for key, value in data.items() recursive %}
<li class="list-group-item">
{% if value is mapping %}
<strong>{{ key }}:</strong>
<ul class="list-group">{{ loop(value.items()) }}</ul>
{% elif value is iterable and value is not string %}
<strong>{{ key }}:</strong>
<ol>
{% for item in value %}
<li>
{% if item is mapping %}
<ul class="list-group">
{{ record_content(item) }}
</ul>
{% else %}
{{ item }}
{% endif %}
</li>
{% endfor %}
</ol>
{% else %}
<strong>{{ key }}:</strong> {{ value }}
{% endif %}
</li>
{% endfor %}
{%- endmacro %}

{%- block page_body %}
<div class="container">
<div class="extra-info">
{%- if pid %}
{%- block record_control_number %}
<b>{{ _('control number:') }}</b>
{{ pid.pid_type }} {{pid.pid_value}}
{%- endblock %}
{% endif %}
</br>
{%- if 'publication_distribution_imprint' in record %}
{%- block record_publication_date %}
<b>{{ _('Publication date:') }}</b>
{{ record['publication_distribution_imprint'][0]['date_of_publication_distribution'][0] }}
{%- endblock %}
{% endif %}
</br>
{%- if 'other_standard_identifier' in record %}
{%- block record_other_standard_identifier %}
<b>{{ _('OAI Id:') }}</b>
{{ record['other_standard_identifier'][0]['standard_number_or_code'] }}
{%- endblock %}
{% endif %}
</div>
<div class="body">
{%- if 'title_statement' in record %}
{%- block record_title %}
<h2>{{ record['title_statement']['title'] }} <br>
</h2>
{%- endblock %}
{% endif %}
{%- if 'main_entry_personal_name' in record %}
{%- block record_author %}
<p><i>
{{ record['main_entry_personal_name']['personal_name'] }}
{%- if 'added_entry_personal_name' in record %}
{{ record['added_entry_personal_name']
| map(attribute='personal_name') | join(', ') }}
{% endif %}
</i></p>
{%- endblock %}
{% endif %}
{%- if 'summary' in record %}
{%- block record_summary %}
<p>{{ record['summary'][0]['summary'] }}</p>
{%- endblock %}
{%- endif %}
</div>
</div>
<div class="raw">
{%- block record_raw %}
{% if record %}
<div class="panel panel-default">
<p>Record:</p>
<ul class="list-group">
{{ record_content(record) }}
</ul>
</div>
{% endif %}
{%- endblock %}
</div>
{%- endblock %}
1 change: 1 addition & 0 deletions requirements-devel.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,4 @@
#
# -e git+git://github.com/mitsuhiko/werkzeug.git#egg=Werkzeug
# -e git+git://github.com/mitsuhiko/jinja2.git#egg=Jinja2
-e git+git://github.com/inveniosoftware/dojson.git#egg=dojson
6 changes: 3 additions & 3 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,14 @@
# as an Intergovernmental Organization or submit itself to any jurisdiction.


[aliases]
test=pytest

[build_sphinx]
source-dir = docs/
build-dir = docs/_build
all_files = 1

[aliases]
test=pytest

[bdist_wheel]
universal = 1

Expand Down

0 comments on commit 72681c6

Please sign in to comment.