浏览代码

improvements to books functions

joel
Simon Bowie 2 年前
父节点
当前提交
4ebbb8434e
共有 7 个文件被更改,包括 106 次插入18 次删除
  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 查看文件

# route for displaying all books in database # route for displaying all books in database
@book.route('/books') @book.route('/books')
def get_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(): for key in request.args.keys():
if key == 'practice': 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) books = db.engine.execute(query)
else: 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 # get filters
# practices # practices
practices_filter = Resource.query.filter_by(type='practice').with_entities(Resource.id, Resource.name) 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 # route for displaying a single book based on the ID in the database
@book.route('/books/<int:book_id>') @book.route('/books/<int:book_id>')
else: else:
book = Resource.query.get(book_id) book = Resource.query.get(book_id)
book.name = request.form['name'] 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'] book.isbn = request.form['isbn']
db.session.commit() db.session.commit()
linked_resources = request.form.getlist('linked_resources') linked_resources = request.form.getlist('linked_resources')

+ 3
- 0
web/app/models.py 查看文件

lessonsLearned = db.Column(db.Text) lessonsLearned = db.Column(db.Text)
references = db.Column(db.Text) references = db.Column(db.Text)
# books # books
author = db.Column(db.Text)
year = db.Column(db.Text)
bookUrl = db.Column(db.Text)
isbn = db.Column(db.Text) isbn = db.Column(db.Text)


# table for relationships # table for relationships

+ 5
- 5
web/app/resources.py 查看文件

flash('Successfully deleted!') flash('Successfully deleted!')


# function to get filters for a specific field # function to get filters for a specific field
def get_filter_values(field):
def get_filter_values(field, type):
# get field values for filter # 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 # turn SQLAlchemy object into list
field_filter = [i for i, in field_filter] field_filter = [i for i, in field_filter]
# split each element on '/' (useful for scriptingLanguage only) # split each element on '/' (useful for scriptingLanguage only)
return field_filter return field_filter


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

+ 30
- 0
web/app/templates/book.html 查看文件

<div class="col"> <div class="col">
<table class="table table-hover"> <table class="table table-hover">
<tbody> <tbody>
{% if resource['bookUrl'] %}
<tr>
<th>
URL:
</th>
<td>
<a href="{{ resource['bookUrl'] }}">{{ resource['bookUrl'] }}</a>
</td>
</tr>
{% endif %}
{% if book %} {% if book %}
<!-- fields for books from isbntools --> <!-- fields for books from isbntools -->
{% if book['Title'] %} {% if book['Title'] %}
</td> </td>
</tr> </tr>
{% endif %} {% 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 %} {% endif %}
</tbody> </tbody>
</table> </table>

+ 21
- 0
web/app/templates/edit.html 查看文件

</div> </div>


{% elif resource['type'] == 'book' %} {% 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"> <div class="mb-3 mt-3">
<label for="isbn">ISBN</label> <label for="isbn">ISBN</label>
<input type="text" name="isbn" placeholder="ISBN" <input type="text" name="isbn" placeholder="ISBN"

+ 27
- 1
web/app/templates/resources.html 查看文件

</div> </div>
</div> </div>
{% endif %} {% 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>
<div class="row"> <div class="row">
{% if languages_filter %} {% if languages_filter %}
<ul class="filter-items"> <ul class="filter-items">
{% for language in languages_filter %} {% for language in languages_filter %}
<li {% if request.args.get('scriptingLanguage') == language %} class="fw-bold"{% endif %}> <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> </li>
{% endfor %} {% endfor %}
</ul> </ul>

+ 8
- 7
web/app/tool.py 查看文件

# route for displaying all tools in database # route for displaying all tools in database
@tool.route('/tools') @tool.route('/tools')
def get_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(): for key in request.args.keys():
if key == 'practice': 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) tools = db.engine.execute(query)
elif key == 'scriptingLanguage': elif key == 'scriptingLanguage':
regex = request.args.get(key) + "$|" + request.args.get(key) + "\s\/" 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: else:
kwargs = {'type': 'tool', key: request.args.get(key)}
kwargs = {'type': type, key: request.args.get(key)}
tools = Resource.query.filter_by(**kwargs) tools = Resource.query.filter_by(**kwargs)
# get filters # get filters
# practices # practices
practices_filter = Resource.query.filter_by(type='practice').with_entities(Resource.id, Resource.name) 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; #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 # license
licenses_filter = get_filter_values('license')
licenses_filter = get_filter_values('license', type)
# language # 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 # route for displaying a single tool based on the ID in the database
@tool.route('/tools/<int:tool_id>') @tool.route('/tools/<int:tool_id>')

正在加载...
取消
保存