diff --git a/app/__init__.py b/app/__init__.py index 63153adf6..17b5a4595 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -1,7 +1,9 @@ +import ago import os import re import urllib import dateutil +from datetime import datetime, timedelta, timezone import pytz from flask import ( Flask, @@ -115,6 +117,7 @@ def create_app(): application.add_template_filter(format_date) application.add_template_filter(format_date_normal) application.add_template_filter(format_date_short) + application.add_template_filter(format_delta) application.add_template_filter(format_notification_status) application.add_template_filter(format_notification_status_as_time) application.add_template_filter(format_notification_status_as_field_status) @@ -251,6 +254,19 @@ def format_date_short(date): return gmt_timezones(date).strftime('%d %B').lstrip('0') +def format_delta(date): + return ago.human( + ( + datetime.now(timezone.utc) + ) - ( + dateutil.parser.parse(date) + ), + future_tense='{} from now', # No-one should ever see this + past_tense='{} ago', + precision=1 + ) + + def valid_phone_number(phone_number): try: validate_phone_number(phone_number) diff --git a/app/assets/stylesheets/_grids.scss b/app/assets/stylesheets/_grids.scss index 6b23567cf..00f8809e6 100644 --- a/app/assets/stylesheets/_grids.scss +++ b/app/assets/stylesheets/_grids.scss @@ -52,6 +52,12 @@ margin-top: 45px; } +.align-with-heading-copy-right { + display: block; + margin-top: 35px; + text-align: right; +} + .global-cookie-message { p { @extend %site-width-container; diff --git a/app/assets/stylesheets/main.scss b/app/assets/stylesheets/main.scss index 0bf2fd0b5..830a68391 100644 --- a/app/assets/stylesheets/main.scss +++ b/app/assets/stylesheets/main.scss @@ -64,6 +64,7 @@ $path: '/static/images/'; @import 'views/documenation'; @import 'views/dashboard'; @import 'views/users'; +@import 'views/api'; // TODO: break this up @import 'app'; diff --git a/app/assets/stylesheets/views/api.scss b/app/assets/stylesheets/views/api.scss new file mode 100644 index 000000000..6a947afef --- /dev/null +++ b/app/assets/stylesheets/views/api.scss @@ -0,0 +1,48 @@ +.api-notifications { + + font-family: monospace; + border-bottom: 1px solid $border-colour; + + &-item { + + border-top: 1px solid $border-colour; + padding: 10px 0 0 0; + + &-title { + color: $link-colour; + text-decoration: none; + display: block; + } + + &-recipient { + display: inline; + } + + &-meta { + color: $secondary-text-colour; + } + + &-time { + text-align: right; + } + + &-key { + display: inline-block; + padding-left: 46px; + } + + &-data { + + padding-left: 31px; + color: $secondary-text-colour; + + &-item { + padding-bottom: 15px; + color: $text-colour; + } + + } + + } + +} diff --git a/app/main/views/api_keys.py b/app/main/views/api_keys.py index d7d92122b..adbe94f4c 100644 --- a/app/main/views/api_keys.py +++ b/app/main/views/api_keys.py @@ -2,7 +2,7 @@ from flask import request, render_template, redirect, url_for, flash from flask_login import login_required from app.main import main from app.main.forms import CreateKeyForm, Whitelist -from app import api_key_api_client, service_api_client, current_service +from app import api_key_api_client, service_api_client, notification_api_client, current_service from app.utils import user_has_permissions from app.notify_client.api_key_api_client import KEY_TYPE_NORMAL, KEY_TYPE_TEST, KEY_TYPE_TEAM @@ -12,7 +12,12 @@ from app.notify_client.api_key_api_client import KEY_TYPE_NORMAL, KEY_TYPE_TEST, @user_has_permissions('manage_api_keys') def api_integration(service_id): return render_template( - 'views/api/index.html' + 'views/api/index.html', + api_notifications=notification_api_client.get_notifications_for_service( + service_id=service_id, + include_jobs=False, + include_from_test_key=True + ) ) diff --git a/app/templates/views/api/index.html b/app/templates/views/api/index.html index 97261e346..d3f5872de 100644 --- a/app/templates/views/api/index.html +++ b/app/templates/views/api/index.html @@ -22,7 +22,7 @@ {% endcall %} {% endif %} -