Bladeren bron

improvements to books functions

joel
Simon Bowie 2 jaren geleden
bovenliggende
commit
4ebbb8434e
7 gewijzigde bestanden met toevoegingen van 106 en 18 verwijderingen
  1. +12
    -5
      web/app/book.py
  2. +3
    -0
      web/app/models.py
  3. +5
    -5
      web/app/resources.py
  4. +30
    -0
      web/app/templates/book.html
  5. +21
    -0
      web/app/templates/edit.html
  6. +27
    -1
      web/app/templates/resources.html
  7. +8
    -7
      web/app/tool.py

+ 12
- 5
web/app/book.py Bestand weergeven

@@ -20,18 +20,21 @@ book = Blueprint('book', __name__)
# route for displaying all books in database
@book.route('/books')
def get_books():
books = Resource.query.filter_by(type='book')
type = 'book'
books = Resource.query.filter_by(type=type)
for key in request.args.keys():
if key == 'practice':
query = 'SELECT Resource.* FROM Resource LEFT JOIN Relationship ON Resource.id=Relationship.first_resource_id WHERE Relationship.second_resource_id=' + request.args.get(key) + ' AND Resource.type="book";'
query = 'SELECT Resource.* FROM Resource LEFT JOIN Relationship ON Resource.id=Relationship.first_resource_id WHERE Relationship.second_resource_id=' + request.args.get(key) + ' AND Resource.type="' + type + '";'
books = db.engine.execute(query)
else:
kwargs = {'type': 'book', key: request.args.get(key)}
tools = Resource.query.filter_by(**kwargs)
kwargs = {'type': type, key: request.args.get(key)}
books = Resource.query.filter_by(**kwargs)
# get filters
# practices
practices_filter = Resource.query.filter_by(type='practice').with_entities(Resource.id, Resource.name)
return render_template('resources.html', resources=books, type='book', practices_filter=practices_filter)
# year
year_filter = get_filter_values('year', type)
return render_template('resources.html', resources=books, type=type, practices_filter=practices_filter, year_filter=year_filter)

# route for displaying a single book based on the ID in the database
@book.route('/books/<int:book_id>')
@@ -55,6 +58,10 @@ def edit_book(book_id):
else:
book = Resource.query.get(book_id)
book.name = request.form['name']
book.description = request.form['description']
book.author = request.form['author']
book.year = request.form['year']
book.bookUrl = request.form['bookUrl']
book.isbn = request.form['isbn']
db.session.commit()
linked_resources = request.form.getlist('linked_resources')

+ 3
- 0
web/app/models.py Bestand weergeven

@@ -47,6 +47,9 @@ class Resource(db.Model):
lessonsLearned = db.Column(db.Text)
references = db.Column(db.Text)
# books
author = db.Column(db.Text)
year = db.Column(db.Text)
bookUrl = db.Column(db.Text)
isbn = db.Column(db.Text)

# table for relationships

+ 5
- 5
web/app/resources.py Bestand weergeven

@@ -27,9 +27,9 @@ def delete_resource(resource_id):
flash('Successfully deleted!')

# function to get filters for a specific field
def get_filter_values(field):
def get_filter_values(field, type):
# get field values for filter
field_filter = Resource.query.filter_by(type='tool').with_entities(getattr(Resource, field))
field_filter = Resource.query.filter_by(type=type).with_entities(getattr(Resource, field))
# turn SQLAlchemy object into list
field_filter = [i for i, in field_filter]
# split each element on '/' (useful for scriptingLanguage only)
@@ -43,7 +43,7 @@ def get_filter_values(field):
return field_filter

def get_book_data(isbn):
#try:
try:
book = meta(isbn)
description = {'desc': desc(isbn)}
book.update(description)
@@ -56,5 +56,5 @@ def get_book_data(isbn):
book_cover = {'thumbnail': openl_url}
book.update(book_cover)
return book
#except:
# pass
except:
pass

+ 30
- 0
web/app/templates/book.html Bestand weergeven

@@ -22,6 +22,16 @@
<div class="col">
<table class="table table-hover">
<tbody>
{% if resource['bookUrl'] %}
<tr>
<th>
URL:
</th>
<td>
<a href="{{ resource['bookUrl'] }}">{{ resource['bookUrl'] }}</a>
</td>
</tr>
{% endif %}
{% if book %}
<!-- fields for books from isbntools -->
{% if book['Title'] %}
@@ -119,6 +129,26 @@
</td>
</tr>
{% endif %}
{% if resource['year'] %}
<tr>
<th>
Publication year:
</th>
<td>
{{ resource['year'] }}
</td>
</tr>
{% endif %}
{% if resource['description'] %}
<tr>
<th>
Summary:
</th>
<td>
{{ resource['description'] }}
</td>
</tr>
{% endif %}
{% endif %}
</tbody>
</table>

+ 21
- 0
web/app/templates/edit.html Bestand weergeven

@@ -155,6 +155,27 @@
</div>

{% elif resource['type'] == 'book' %}
<div class="mb-3 mt-3">
<label for="author">Author</label>
<input type="text" name="author" placeholder="Author"
class="form-control"
value="{{ request.form['author'] or resource['author'] }}">
</input>
</div>
<div class="mb-3 mt-3">
<label for="year">Publication year</label>
<input type="text" name="year" placeholder="Publication year"
class="form-control"
value="{{ request.form['year'] or resource['year'] }}">
</input>
</div>
<div class="mb-3 mt-3">
<label for="bookUrl">URL</label>
<input type="text" name="bookUrl" placeholder="URL"
class="form-control"
value="{{ request.form['bookUrl'] or resource['bookUrl'] }}">
</input>
</div>
<div class="mb-3 mt-3">
<label for="isbn">ISBN</label>
<input type="text" name="isbn" placeholder="ISBN"

+ 27
- 1
web/app/templates/resources.html Bestand weergeven

@@ -47,6 +47,32 @@
</div>
</div>
{% endif %}
{% if year_filter %}
<div class="col-sm-6 d-md-block d-sm-none d-none">
<div class="filter-title">Year</div>
<ul class="filter-items">
{% for year in year_filter %}
<li {% if request.args.get('year') == year %} class="fw-bold"{% endif %}>
<a href="/books?year={{year}}">{{ year }}</a>
</li>
{% endfor %}
</ul>
</div>
<div class="d-md-none accordion">
<div class="accordion-item">
<div class="filter-title accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#filter-year">Year</div>
<div class="accordion-body">
<ul id="filter-year" class="collapse filter-items">
{% for year in year_filter %}
<li {% if request.args.get('year') == year %} class="fw-bold"{% endif %}>
<a href="/books?year={{year}}">{{ year }}</a>
</li>
{% endfor %}
</ul>
</div>
</div>
</div>
{% endif %}
</div>
<div class="row">
{% if languages_filter %}
@@ -55,7 +81,7 @@
<ul class="filter-items">
{% for language in languages_filter %}
<li {% if request.args.get('scriptingLanguage') == language %} class="fw-bold"{% endif %}>
<a href="/{{type}}?scriptingLanguage={{language}}">{{ language }}</a>
<a href="/tools?scriptingLanguage={{language}}">{{ language }}</a>
</li>
{% endfor %}
</ul>

+ 8
- 7
web/app/tool.py Bestand weergeven

@@ -20,26 +20,27 @@ tool = Blueprint('tool', __name__)
# route for displaying all tools in database
@tool.route('/tools')
def get_tools():
tools = Resource.query.filter_by(type='tool')
type = 'tool'
tools = Resource.query.filter_by(type=type)
for key in request.args.keys():
if key == 'practice':
query = 'SELECT Resource.* FROM Resource LEFT JOIN Relationship ON Resource.id=Relationship.first_resource_id WHERE Relationship.second_resource_id=' + request.args.get(key) + ' AND Resource.type="tool";'
query = 'SELECT Resource.* FROM Resource LEFT JOIN Relationship ON Resource.id=Relationship.first_resource_id WHERE Relationship.second_resource_id=' + request.args.get(key) + ' AND Resource.type="' + type + '";'
tools = db.engine.execute(query)
elif key == 'scriptingLanguage':
regex = request.args.get(key) + "$|" + request.args.get(key) + "\s\/"
tools = Resource.query.filter_by(type='tool').filter(Resource.scriptingLanguage.regexp_match(regex))
tools = Resource.query.filter_by(type=type).filter(Resource.scriptingLanguage.regexp_match(regex))
else:
kwargs = {'type': 'tool', key: request.args.get(key)}
kwargs = {'type': type, key: request.args.get(key)}
tools = Resource.query.filter_by(**kwargs)
# get filters
# practices
practices_filter = Resource.query.filter_by(type='practice').with_entities(Resource.id, Resource.name)
#FOR LATER: SELECT Resource.name, second.name FROM Resource LEFT JOIN Relationship ON Resource.id=Relationship.first_resource_id LEFT JOIN Resource second ON Relationship.second_resource_id=second.id;
# license
licenses_filter = get_filter_values('license')
licenses_filter = get_filter_values('license', type)
# language
languages_filter = get_filter_values('scriptingLanguage')
return render_template('resources.html', resources=tools, type='tool', practices_filter=practices_filter, licenses_filter=licenses_filter, languages_filter=languages_filter)
languages_filter = get_filter_values('scriptingLanguage', type)
return render_template('resources.html', resources=tools, type=type, practices_filter=practices_filter, licenses_filter=licenses_filter, languages_filter=languages_filter)

# route for displaying a single tool based on the ID in the database
@tool.route('/tools/<int:tool_id>')

Laden…
Annuleren
Opslaan