Merge branch 'master' into patch-1
This commit is contained in:
commit
e86fce0a7e
8 changed files with 108 additions and 75 deletions
1
.tool-versions
Normal file
1
.tool-versions
Normal file
|
@ -0,0 +1 @@
|
||||||
|
python 3.9.2
|
|
@ -3,11 +3,13 @@
|
||||||
"""Main Haldis script"""
|
"""Main Haldis script"""
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
import sentry_sdk
|
||||||
import typing
|
import typing
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from logging.handlers import TimedRotatingFileHandler
|
from logging.handlers import TimedRotatingFileHandler
|
||||||
|
|
||||||
from admin import init_admin
|
from admin import init_admin
|
||||||
|
from config import Configuration
|
||||||
from flask import Flask, render_template, Response
|
from flask import Flask, render_template, Response
|
||||||
from flask_bootstrap import Bootstrap, StaticCDN
|
from flask_bootstrap import Bootstrap, StaticCDN
|
||||||
from flask_debugtoolbar import DebugToolbarExtension
|
from flask_debugtoolbar import DebugToolbarExtension
|
||||||
|
@ -19,6 +21,7 @@ from login import init_login
|
||||||
from markupsafe import Markup
|
from markupsafe import Markup
|
||||||
from models import db
|
from models import db
|
||||||
from models.anonymous_user import AnonymouseUser
|
from models.anonymous_user import AnonymouseUser
|
||||||
|
from sentry_sdk.integrations.flask import FlaskIntegration
|
||||||
from utils import euro_string, price_range_string, ignore_none
|
from utils import euro_string, price_range_string, ignore_none
|
||||||
from zeus import init_oauth
|
from zeus import init_oauth
|
||||||
|
|
||||||
|
@ -177,5 +180,11 @@ def create_app():
|
||||||
|
|
||||||
# For usage when you directly call the script with python
|
# For usage when you directly call the script with python
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
if Configuration.SENTRY_DSN:
|
||||||
|
sentry_sdk.init(
|
||||||
|
dsn=Configuration.SENTRY_DSN,
|
||||||
|
integrations=[FlaskIntegration()]
|
||||||
|
)
|
||||||
|
|
||||||
app, app_mgr = create_app()
|
app, app_mgr = create_app()
|
||||||
app_mgr.run()
|
app_mgr.run()
|
||||||
|
|
|
@ -12,5 +12,6 @@ class Configuration:
|
||||||
SECRET_KEY = "<change>"
|
SECRET_KEY = "<change>"
|
||||||
SLACK_WEBHOOK = None
|
SLACK_WEBHOOK = None
|
||||||
LOGFILE = "haldis.log"
|
LOGFILE = "haldis.log"
|
||||||
|
SENTRY_DSN = None
|
||||||
ZEUS_KEY = "tomtest"
|
ZEUS_KEY = "tomtest"
|
||||||
ZEUS_SECRET = "blargh"
|
ZEUS_SECRET = "blargh"
|
||||||
|
|
|
@ -30,8 +30,11 @@ class OrderForm(Form):
|
||||||
def populate(self) -> None:
|
def populate(self) -> None:
|
||||||
"Fill in the options for courier for an Order"
|
"Fill in the options for courier for an Order"
|
||||||
if current_user.is_admin():
|
if current_user.is_admin():
|
||||||
self.courier_id.choices = [(0, None)] + [
|
self.courier_id.choices = [
|
||||||
(u.id, u.username) for u in User.query.order_by("username")
|
(0, None),
|
||||||
|
(current_user.id, current_user.username),
|
||||||
|
] + [
|
||||||
|
(u.id, u.username) for u in User.query.order_by("username") if u.id != current_user.id
|
||||||
]
|
]
|
||||||
else:
|
else:
|
||||||
self.courier_id.choices = [
|
self.courier_id.choices = [
|
||||||
|
|
|
@ -155,60 +155,66 @@
|
||||||
|
|
||||||
<div class="box" id="order_info">
|
<div class="box" id="order_info">
|
||||||
<h3>Order information</h3>
|
<h3>Order information</h3>
|
||||||
<dl>
|
<div class="row">
|
||||||
<div>
|
<dl class="col-md-10 col-lg-8">
|
||||||
<dt>Order opens</dt>
|
<div>
|
||||||
<dd>{{ order.starttime.strftime("%Y-%m-%d, %H:%M") }}</dd>
|
<dt>Order opens</dt>
|
||||||
|
<dd>{{ order.starttime.strftime("%Y-%m-%d, %H:%M") }}</dd>
|
||||||
|
|
||||||
<dt>Order closes</dt>
|
<dt>Order closes</dt>
|
||||||
<dd>
|
<dd>
|
||||||
{% if order.stoptime %}
|
{% if order.stoptime %}
|
||||||
{% set stoptimefmt = (
|
{% set stoptimefmt = (
|
||||||
"%H:%M" if order.stoptime.date() == order.starttime.date()
|
"%H:%M" if order.stoptime.date() == order.starttime.date()
|
||||||
else "%Y-%m-%d, %H:%M"
|
else "%Y-%m-%d, %H:%M"
|
||||||
) %}
|
) %}
|
||||||
{{ order.stoptime.strftime(stoptimefmt) }} ({{ order.stoptime|countdown }})
|
{{ order.stoptime.strftime(stoptimefmt) }} ({{ order.stoptime|countdown }})
|
||||||
{% else %}
|
{% else %}
|
||||||
Never
|
Never
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</dd>
|
</dd>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<dt>Location</dt>
|
||||||
|
<dd>
|
||||||
|
{% if order.location %}
|
||||||
|
<a href="{{ url_for('general_bp.location', location_id=order.location_id) }}">{{ order.location_name }}</a>
|
||||||
|
{% else %}
|
||||||
|
{{ order.location_name }}
|
||||||
|
{% endif %}
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
<dt>Courier</dt>
|
||||||
|
<dd>
|
||||||
|
{% if order.courier == None %}
|
||||||
|
{% if not current_user.is_anonymous() %}
|
||||||
|
<form action="{{ url_for('order_bp.volunteer', order_slug=order.slug) }}" method="post" style="display:inline">
|
||||||
|
<input type="submit" class="btn btn-primary btn-sm" value="Volunteer"></input>
|
||||||
|
</form>
|
||||||
|
{% else %}No-one yet{% endif %}
|
||||||
|
{% else %}
|
||||||
|
{{ order.courier.username }}
|
||||||
|
{% endif %}
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<div class="col-md-2 col-lg-4">
|
||||||
|
<img src="https://dsa.ugent.be/api/verenigingen/{{ order.association }}/logo" class="img-responsive align-top" style="max-width:200px;width:100%">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
|
||||||
<dt>Location</dt>
|
|
||||||
<dd>
|
|
||||||
{% if order.location %}
|
|
||||||
<a href="{{ url_for('general_bp.location', location_id=order.location_id) }}">{{ order.location_name }}</a>
|
|
||||||
{% else %}
|
|
||||||
{{ order.location_name }}
|
|
||||||
{% endif %}
|
|
||||||
</dd>
|
|
||||||
|
|
||||||
<dt>Courier</dt>
|
|
||||||
<dd>
|
|
||||||
{% if order.courier == None %}
|
|
||||||
{% if not current_user.is_anonymous() %}
|
|
||||||
<form action="{{ url_for('order_bp.volunteer', order_slug=order.slug) }}" method="post" style="display:inline">
|
|
||||||
<input type="submit" class="btn btn-primary btn-sm" value="Volunteer"></input>
|
|
||||||
</form>
|
|
||||||
{% else %}No-one yet{% endif %}
|
|
||||||
{% else %}
|
|
||||||
{{ order.courier.username }}
|
|
||||||
{% endif %}
|
|
||||||
</dd>
|
|
||||||
</div>
|
|
||||||
</dl>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
{% if order.can_close(current_user.id) -%}
|
|
||||||
<form action="{{ url_for('order_bp.close_order', order_slug=order.slug) }}" method="post" style="display:inline">
|
|
||||||
<input type="submit" class="btn btn-danger" value="Close"></input>
|
|
||||||
</form>
|
|
||||||
{% endif %}
|
|
||||||
{% if courier_or_admin %}
|
|
||||||
<a class="btn" href="{{ url_for('order_bp.order_edit', order_slug=order.slug) }}">Edit</a>
|
|
||||||
{%- endif %}
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{% if order.can_close(current_user.id) -%}
|
||||||
|
<form action="{{ url_for('order_bp.close_order', order_slug=order.slug) }}" method="post" style="display:inline">
|
||||||
|
<input type="submit" class="btn btn-danger" value="Close"></input>
|
||||||
|
</form>
|
||||||
|
{% endif %}
|
||||||
|
{% if courier_or_admin %}
|
||||||
|
<a class="btn" href="{{ url_for('order_bp.order_edit', order_slug=order.slug) }}">Edit</a>
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="box" id="how_to_order">
|
<div class="box" id="how_to_order">
|
||||||
|
|
|
@ -1,14 +1,17 @@
|
||||||
{% macro render_order(order) -%}
|
{% macro render_order(order) -%}
|
||||||
<div class="row order_row">
|
<div class="row order_row">
|
||||||
<div class="col-md-8 col-lg-9 order_data">
|
<div class="col-md-6 order_data">
|
||||||
<h5>{{ order.location_name }}</h5>
|
<h5>{{ order.location_name }}</h5>
|
||||||
<b class="amount_of_orders">{{ order.items.count() }} items ordered</b></p>
|
<b class="amount_of_orders">{{ order.items.count() }} items ordered for {{ order.association }}</b></p>
|
||||||
<p class="time_data">
|
<p class="time_data">
|
||||||
{% if order.stoptime %}
|
{% if order.stoptime %}
|
||||||
<span><b>Closes </b>{{ order.stoptime.strftime("%H:%M") }}</span>{{ order.stoptime|countdown }}
|
<span><b>Closes </b>{{ order.stoptime.strftime("%H:%M") }}</span>{{ order.stoptime|countdown }}
|
||||||
{% else %}open{% endif %}<br/>
|
{% else %}open{% endif %}<br/>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4 col-lg-3 expand_button_wrapper">
|
<div class="col-md-3">
|
||||||
|
<img src="https://dsa.ugent.be/api/verenigingen/{{ order.association }}/logo" class="img-responsive align-bottom" style="max-width:200px;width:100%">
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 expand_button_wrapper">
|
||||||
<a class="btn btn-primary btn-block align-bottom expand_button" href="{{ url_for('order_bp.order_from_slug', order_slug=order.slug) }}">Expand</a>
|
<a class="btn btn-primary btn-block align-bottom expand_button" href="{{ url_for('order_bp.order_from_slug', order_slug=order.slug) }}">Expand</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -12,3 +12,4 @@ black
|
||||||
pymysql
|
pymysql
|
||||||
pyyaml
|
pyyaml
|
||||||
tatsu<5.6 # >=5.6 needs Python >=3.8
|
tatsu<5.6 # >=5.6 needs Python >=3.8
|
||||||
|
sentry-sdk[flask]
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# This file is autogenerated by pip-compile
|
# This file is autogenerated by pip-compile with python 3.9
|
||||||
# To update, run:
|
# To update, run:
|
||||||
#
|
#
|
||||||
# pip-compile
|
# pip-compile
|
||||||
|
@ -11,11 +11,15 @@ appdirs==1.4.4
|
||||||
black==21.6b0
|
black==21.6b0
|
||||||
# via -r requirements.in
|
# via -r requirements.in
|
||||||
blinker==1.4
|
blinker==1.4
|
||||||
# via flask-debugtoolbar
|
# via
|
||||||
|
# flask-debugtoolbar
|
||||||
|
# sentry-sdk
|
||||||
cachelib==0.1.1
|
cachelib==0.1.1
|
||||||
# via flask-oauthlib
|
# via flask-oauthlib
|
||||||
certifi==2021.5.30
|
certifi==2021.5.30
|
||||||
# via requests
|
# via
|
||||||
|
# requests
|
||||||
|
# sentry-sdk
|
||||||
chardet==4.0.0
|
chardet==4.0.0
|
||||||
# via requests
|
# via requests
|
||||||
click==7.1.2
|
click==7.1.2
|
||||||
|
@ -24,6 +28,19 @@ click==7.1.2
|
||||||
# flask
|
# flask
|
||||||
dominate==2.6.0
|
dominate==2.6.0
|
||||||
# via flask-bootstrap
|
# via flask-bootstrap
|
||||||
|
flask==1.1.4
|
||||||
|
# via
|
||||||
|
# -r requirements.in
|
||||||
|
# flask-admin
|
||||||
|
# flask-bootstrap
|
||||||
|
# flask-debugtoolbar
|
||||||
|
# flask-login
|
||||||
|
# flask-migrate
|
||||||
|
# flask-oauthlib
|
||||||
|
# flask-script
|
||||||
|
# flask-sqlalchemy
|
||||||
|
# flask-wtf
|
||||||
|
# sentry-sdk
|
||||||
flask-admin==1.5.8
|
flask-admin==1.5.8
|
||||||
# via -r requirements.in
|
# via -r requirements.in
|
||||||
flask-bootstrap==3.3.7.1
|
flask-bootstrap==3.3.7.1
|
||||||
|
@ -44,18 +61,6 @@ flask-sqlalchemy==2.5.1
|
||||||
# flask-migrate
|
# flask-migrate
|
||||||
flask-wtf==0.15.1
|
flask-wtf==0.15.1
|
||||||
# via -r requirements.in
|
# via -r requirements.in
|
||||||
flask==1.1.4
|
|
||||||
# via
|
|
||||||
# -r requirements.in
|
|
||||||
# flask-admin
|
|
||||||
# flask-bootstrap
|
|
||||||
# flask-debugtoolbar
|
|
||||||
# flask-login
|
|
||||||
# flask-migrate
|
|
||||||
# flask-oauthlib
|
|
||||||
# flask-script
|
|
||||||
# flask-sqlalchemy
|
|
||||||
# flask-wtf
|
|
||||||
greenlet==1.1.0
|
greenlet==1.1.0
|
||||||
# via sqlalchemy
|
# via sqlalchemy
|
||||||
idna==2.10
|
idna==2.10
|
||||||
|
@ -92,10 +97,12 @@ pyyaml==5.4.1
|
||||||
# via -r requirements.in
|
# via -r requirements.in
|
||||||
regex==2021.4.4
|
regex==2021.4.4
|
||||||
# via black
|
# via black
|
||||||
requests-oauthlib==1.1.0
|
|
||||||
# via flask-oauthlib
|
|
||||||
requests==2.25.1
|
requests==2.25.1
|
||||||
# via requests-oauthlib
|
# via requests-oauthlib
|
||||||
|
requests-oauthlib==1.1.0
|
||||||
|
# via flask-oauthlib
|
||||||
|
sentry-sdk[flask]==1.10.1
|
||||||
|
# via -r requirements.in
|
||||||
six==1.16.0
|
six==1.16.0
|
||||||
# via python-dateutil
|
# via python-dateutil
|
||||||
sqlalchemy==1.4.18
|
sqlalchemy==1.4.18
|
||||||
|
@ -106,8 +113,10 @@ tatsu==4.4.0
|
||||||
# via -r requirements.in
|
# via -r requirements.in
|
||||||
toml==0.10.2
|
toml==0.10.2
|
||||||
# via black
|
# via black
|
||||||
urllib3==1.26.5
|
urllib3==1.26.12
|
||||||
# via requests
|
# via
|
||||||
|
# requests
|
||||||
|
# sentry-sdk
|
||||||
visitor==0.1.3
|
visitor==0.1.3
|
||||||
# via flask-bootstrap
|
# via flask-bootstrap
|
||||||
werkzeug==1.0.1
|
werkzeug==1.0.1
|
||||||
|
|
Loading…
Reference in a new issue