Merge pull request #659 from GSA/ADMIN-97_Resend_Expired_Invites

Admin 97 resend expired invites
This commit is contained in:
Carlo Costino
2023-12-20 14:05:41 -05:00
committed by GitHub
303 changed files with 450 additions and 460 deletions
+15 -34
View File
@@ -117,9 +117,7 @@ def purge_functional_test_data(user_email_prefix):
current_app.logger.error("Can only be run in development")
return
users = User.query.filter(
User.email_address.like("{}%".format(user_email_prefix))
).all()
users = User.query.filter(User.email_address.like(f"{user_email_prefix}%")).all()
for usr in users:
# Make sure the full email includes a uuid in it
# Just in case someone decides to use a similar email address.
@@ -127,9 +125,7 @@ def purge_functional_test_data(user_email_prefix):
uuid.UUID(usr.email_address.split("@")[0].split("+")[1])
except ValueError:
print(
"Skipping {} as the user email doesn't contain a UUID.".format(
usr.email_address
)
f"Skipping {usr.email_address} as the user email doesn't contain a UUID."
)
else:
services = dao_fetch_all_services_by_user(usr.id)
@@ -164,7 +160,7 @@ def purge_functional_test_data(user_email_prefix):
def insert_inbound_numbers_from_file(file_name):
# TODO maintainability what is the purpose of this command? Who would use it and why?
print("Inserting inbound numbers from {}".format(file_name))
print(f"Inserting inbound numbers from {file_name}")
with open(file_name) as file:
sql = "insert into inbound_numbers values('{}', '{}', 'sns', null, True, now(), null);"
@@ -199,9 +195,7 @@ def rebuild_ft_billing_for_day(service_id, day):
def rebuild_ft_data(process_day, service):
deleted_rows = delete_billing_data_for_service_for_day(process_day, service)
current_app.logger.info(
"deleted {} existing billing rows for {} on {}".format(
deleted_rows, service, process_day
)
f"deleted {deleted_rows} existing billing rows for {service} on {process_day}"
)
transit_data = fetch_billing_data_for_day(
process_day=process_day, service_id=service
@@ -211,9 +205,7 @@ def rebuild_ft_billing_for_day(service_id, day):
# upsert existing rows
update_fact_billing(data, process_day)
current_app.logger.info(
"added/updated {} billing rows for {} on {}".format(
len(transit_data), service, process_day
)
f"added/updated {len(transit_data)} billing rows for {service} on {process_day}"
)
if service_id:
@@ -276,7 +268,7 @@ def bulk_invite_user_to_service(file_name, service_id, user_id, auth_type, permi
}
current_app.logger.info(f"DATA = {data}")
with current_app.test_request_context(
path="/service/{}/invite/".format(service_id),
path=f"/service/{service_id}/invite/",
method="POST",
data=json.dumps(data),
headers={"Content-Type": "application/json"},
@@ -286,16 +278,12 @@ def bulk_invite_user_to_service(file_name, service_id, user_id, auth_type, permi
current_app.logger.info(f"RESPONSE {response[1]}")
if response[1] != 201:
print(
"*** ERROR occurred for email address: {}".format(
email_address.strip()
)
f"*** ERROR occurred for email address: {email_address.strip()}"
)
print(response[0].get_data(as_text=True))
except Exception as e:
print(
"*** ERROR occurred for email address: {}. \n{}".format(
email_address.strip(), e
)
f"*** ERROR occurred for email address: {email_address.strip()}. \n{e}"
)
file.close()
@@ -318,7 +306,7 @@ def bulk_invite_user_to_service(file_name, service_id, user_id, auth_type, permi
)
def update_jobs_archived_flag(start_date, end_date):
current_app.logger.info(
"Archiving jobs created between {} to {}".format(start_date, end_date)
f"Archiving jobs created between {start_date} to {end_date}"
)
process_date = start_date
@@ -337,15 +325,14 @@ def update_jobs_archived_flag(start_date, end_date):
)
db.session.commit()
current_app.logger.info(
"jobs: --- Completed took {}ms. Archived {} jobs for {}".format(
datetime.now() - start_time, result.rowcount, process_date
)
f"jobs: --- Completed took {datetime.now() - start_time}ms. Archived "
f"{result.rowcount} jobs for {process_date}"
)
process_date += timedelta(days=1)
total_updated += result.rowcount
current_app.logger.info("Total archived jobs = {}".format(total_updated))
current_app.logger.info(f"Total archived jobs = {total_updated}")
@notify_command(name="populate-organizations-from-file")
@@ -551,9 +538,7 @@ def fix_billable_units():
show_prefix=notification.service.prefix_sms,
)
print(
"Updating notification: {} with {} billable_units".format(
notification.id, template.fragment_count
)
f"Updating notification: {notification.id} with {template.fragment_count} billable_units"
)
Notification.query.filter(Notification.id == notification.id).update(
@@ -586,9 +571,7 @@ def process_row_from_job(job_id, job_row_number):
if row.index == job_row_number:
notification_id = process_row(row, template, job, job.service)
current_app.logger.info(
"Process row {} for job {} created notification_id: {}".format(
job_row_number, job_id, notification_id
)
f"Process row {job_row_number} for job {job_id} created notification_id: {notification_id}"
)
@@ -623,9 +606,7 @@ def populate_annual_billing_with_the_previous_years_allowance(year):
latest_annual_billing, {"service_id": row.id}
)
free_allowance = [x[0] for x in free_allowance_rows]
print(
"create free limit of {} for service: {}".format(free_allowance[0], row.id)
)
print(f"create free limit of {free_allowance[0]} for service: {row.id}")
dao_create_or_update_annual_billing_for_year(
service_id=row.id,
free_sms_fragment_limit=free_allowance[0],
+16 -12
View File
@@ -1,7 +1,7 @@
from datetime import datetime, timedelta
from app import db
from app.models import INVITE_EXPIRED, InvitedUser
from app.models import INVITE_EXPIRED, INVITE_PENDING, InvitedUser
def save_invited_user(invited_user):
@@ -13,32 +13,36 @@ def get_invited_user_by_service_and_id(service_id, invited_user_id):
return InvitedUser.query.filter(
InvitedUser.service_id == service_id,
InvitedUser.id == invited_user_id,
InvitedUser.status != INVITE_EXPIRED,
).one()
def get_expired_invite_by_service_and_id(service_id, invited_user_id):
return InvitedUser.query.filter(
InvitedUser.service_id == service_id,
InvitedUser.id == invited_user_id,
InvitedUser.status == INVITE_EXPIRED,
).one()
def get_invited_user_by_id(invited_user_id):
return InvitedUser.query.filter(
InvitedUser.id == invited_user_id, InvitedUser.status != INVITE_EXPIRED
).one()
return InvitedUser.query.filter(InvitedUser.id == invited_user_id).one()
def get_expired_invited_users_for_service(service_id):
return InvitedUser.query.filter(
InvitedUser.service_id == service_id, InvitedUser.status == INVITE_EXPIRED
).all()
return InvitedUser.query.filter(InvitedUser.service_id == service_id).all()
def get_invited_users_for_service(service_id):
return InvitedUser.query.filter(
InvitedUser.service_id == service_id, InvitedUser.status != INVITE_EXPIRED
).all()
return InvitedUser.query.filter(InvitedUser.service_id == service_id).all()
def expire_invitations_created_more_than_two_days_ago():
expired = (
db.session.query(InvitedUser)
.filter(InvitedUser.created_at <= datetime.utcnow() - timedelta(days=2))
.filter(
InvitedUser.created_at <= datetime.utcnow() - timedelta(days=2),
InvitedUser.status.in_((INVITE_PENDING,)),
)
.update({InvitedUser.status: INVITE_EXPIRED})
)
db.session.commit()
+8 -13
View File
@@ -87,9 +87,7 @@ def persist_notification(
if not notification_id:
notification_id = uuid.uuid4()
current_app.logger.info(
"Persisting notification with id {}".format(notification_id)
)
current_app.logger.info(f"Persisting notification with id {notification_id}")
notification = Notification(
id=notification_id,
@@ -124,9 +122,7 @@ def persist_notification(
notification.phone_prefix = recipient_info.country_prefix
notification.rate_multiplier = recipient_info.billable_units
elif notification_type == EMAIL_TYPE:
current_app.logger.info(
"Persisting notification with type: {}".format(EMAIL_TYPE)
)
current_app.logger.info(f"Persisting notification with type: {EMAIL_TYPE}")
notification.normalised_to = format_email_address(notification.to)
# if simulated create a Notification model to return but do not persist the Notification to the dB
@@ -141,9 +137,7 @@ def persist_notification(
)
current_app.logger.info(
"{} {} created at {}".format(
notification_type, notification_id, notification_created_at
)
f"{notification_type} {notification_id} created at {notification_created_at}"
)
return notification
@@ -170,15 +164,16 @@ def send_notification_to_queue_detached(
raise
current_app.logger.debug(
"{} {} sent to the {} queue for delivery".format(
notification_type, notification_id, queue
)
f"{notification_type} {notification_id} sent to the {queue} queue for delivery"
)
def send_notification_to_queue(notification, queue=None):
send_notification_to_queue_detached(
notification.key_type, notification.notification_type, notification.id, queue
notification.key_type,
notification.notification_type,
notification.id,
queue,
)
+46 -11
View File
@@ -1,9 +1,12 @@
from datetime import datetime
from flask import Blueprint, current_app, jsonify, request
from itsdangerous import BadData, SignatureExpired
from notifications_utils.url_safe_token import check_token, generate_token
from app.config import QueueNames
from app.dao.invited_user_dao import (
get_expired_invite_by_service_and_id,
get_expired_invited_users_for_service,
get_invited_user_by_id,
get_invited_user_by_service_and_id,
@@ -12,7 +15,7 @@ from app.dao.invited_user_dao import (
)
from app.dao.templates_dao import dao_get_template_by_id
from app.errors import InvalidRequest, register_errors
from app.models import EMAIL_TYPE, KEY_TYPE_NORMAL, Service
from app.models import EMAIL_TYPE, INVITE_PENDING, KEY_TYPE_NORMAL, Service
from app.notifications.process_notifications import (
persist_notification,
send_notification_to_queue,
@@ -24,15 +27,11 @@ service_invite = Blueprint("service_invite", __name__)
register_errors(service_invite)
@service_invite.route("/service/<service_id>/invite", methods=["POST"])
def create_invited_user(service_id):
request_json = request.get_json()
invited_user = invited_user_schema.load(request_json)
save_invited_user(invited_user)
def _create_service_invite(invited_user, invite_link_host):
template_id = current_app.config["INVITATION_EMAIL_TEMPLATE_ID"]
template = dao_get_template_by_id(template_id)
service = Service.query.get(current_app.config["NOTIFY_SERVICE_ID"])
saved_notification = persist_notification(
@@ -43,10 +42,7 @@ def create_invited_user(service_id):
personalisation={
"user_name": invited_user.from_user.name,
"service_name": invited_user.service.name,
"url": invited_user_url(
invited_user.id,
request_json.get("invite_link_host"),
),
"url": invited_user_url(invited_user.id, invite_link_host),
},
notification_type=EMAIL_TYPE,
api_key_id=None,
@@ -56,6 +52,15 @@ def create_invited_user(service_id):
send_notification_to_queue(saved_notification, queue=QueueNames.NOTIFY)
@service_invite.route("/service/<service_id>/invite", methods=["POST"])
def create_invited_user(service_id):
request_json = request.get_json()
invited_user = invited_user_schema.load(request_json)
save_invited_user(invited_user)
_create_service_invite(invited_user, request_json.get("invite_link_host"))
return jsonify(data=invited_user_schema.dump(invited_user)), 201
@@ -92,6 +97,36 @@ def update_invited_user(service_id, invited_user_id):
return jsonify(data=invited_user_schema.dump(fetched)), 200
@service_invite.route(
"/service/<service_id>/invite/<invited_user_id>/resend", methods=["POST"]
)
def resend_service_invite(service_id, invited_user_id):
"""Resend an expired invite.
This resets the invited user's created date and status to make it a new invite, and
sends the new invite out to the user.
Note:
This ignores the POST data entirely.
"""
fetched = get_expired_invite_by_service_and_id(
service_id=service_id,
invited_user_id=invited_user_id,
)
fetched.created_at = datetime.utcnow()
fetched.status = INVITE_PENDING
current_data = {k: v for k, v in invited_user_schema.dump(fetched).items()}
update_dict = invited_user_schema.load(current_data)
save_invited_user(update_dict)
_create_service_invite(fetched, current_app.config["ADMIN_BASE_URL"])
return jsonify(data=invited_user_schema.dump(fetched)), 200
def invited_user_url(invited_user_id, invite_link_host=None):
token = generate_token(
str(invited_user_id),
+3 -3
View File
@@ -1,10 +1,10 @@
import os
import socket
import sys
import traceback
import gunicorn
import eventlet
import socket
import eventlet
import gunicorn
workers = 4
worker_class = "eventlet"
+3 -1
View File
@@ -1,7 +1,9 @@
from __future__ import with_statement
from logging.config import fileConfig
from alembic import context
from sqlalchemy import engine_from_config, pool
from logging.config import fileConfig
# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
@@ -10,8 +10,8 @@ Create Date: 2016-04-07 17:22:12.147542
revision = "0001_restart_migrations"
down_revision = None
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -10,9 +10,9 @@ Create Date: 2016-04-15 12:12:46.383782
revision = "0002_add_content_char_count"
down_revision = "0001_restart_migrations"
from alembic import op
import sqlalchemy as sa
from sqlalchemy.sql import table, column
from alembic import op
from sqlalchemy.sql import column, table
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2016-04-19 13:01:54.519821
revision = "0003_add_service_history"
down_revision = "0002_add_content_char_count"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -10,8 +10,8 @@ Create Date: 2016-04-20 13:59:01.132535
revision = "0004_notification_stats_date"
down_revision = "0003_add_service_history"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2016-04-20 15:13:42.229197
revision = "0005_add_provider_stats"
down_revision = "0004_notification_stats_date"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
+1 -1
View File
@@ -10,8 +10,8 @@ Create Date: 2016-04-20 17:21:38.541766
revision = "0006_api_keys_history"
down_revision = "0005_add_provider_stats"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
+1 -1
View File
@@ -10,8 +10,8 @@ Create Date: 2016-04-22 09:51:55.615891
revision = "0007_template_history"
down_revision = "0006_api_keys_history"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
+1 -1
View File
@@ -10,8 +10,8 @@ Create Date: 2016-04-25 14:16:49.787229
revision = "0008_archive_template"
down_revision = "0007_template_history"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -10,8 +10,8 @@ Create Date: 2016-04-26 14:54:56.852642
revision = "0009_created_by_for_jobs"
down_revision = "0008_archive_template"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
+1 -1
View File
@@ -10,8 +10,8 @@ Create Date: 2016-04-26 13:08:42.892813
revision = "0010_events_table"
down_revision = "0009_created_by_for_jobs"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -14,8 +14,8 @@ down_revision = "0010_events_table"
import uuid
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -10,8 +10,8 @@ Create Date: 2016-05-05 09:18:26.926275
revision = "0012_complete_provider_details"
down_revision = "0011_ad_provider_details"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
from sqlalchemy.dialects.postgresql import ENUM
@@ -10,8 +10,8 @@ Create Date: 2016-05-11 16:00:51.478012
revision = "0014_add_template_version"
down_revision = "0012_complete_provider_details"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -10,8 +10,8 @@ Create Date: 2016-05-16 13:55:27.179748
revision = "0015_fix_template_data"
down_revision = "0014_add_template_version"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
+1 -1
View File
@@ -10,8 +10,8 @@ Create Date: 2016-05-17 09:59:49.032865
revision = "0016_reply_to_email"
down_revision = "0015_fix_template_data"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,12 +10,8 @@ Create Date: 2016-05-17 11:23:36.881219
revision = "0017_add_failure_types"
down_revision = "0016_reply_to_email"
from alembic import op
import sqlalchemy as sa
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
@@ -10,8 +10,8 @@ Create Date: 2016-05-18 09:39:22.512042
revision = "0018_remove_subject_uniqueness"
down_revision = "0017_add_failure_types"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2016-05-18 15:04:24.513071
revision = "0019_add_job_row_number"
down_revision = "0018_remove_subject_uniqueness"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2016-05-20 15:15:03.850862
revision = "0020_template_history_fix"
down_revision = "0019_add_job_row_number"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -12,8 +12,8 @@ from sqlalchemy import text
revision = "0021_add_delivered_failed_counts"
down_revision = "0020_template_history_fix"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2016-05-25 15:47:32.568097
revision = "0022_add_pending_status"
down_revision = "0021_add_delivered_failed_counts"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2016-05-31 11:11:45.979594
revision = "0023_add_research_mode"
down_revision = "0022_add_pending_status"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2016-05-31 11:11:45.979594
revision = "0024_add_research_mode_defaults"
down_revision = "0023_add_research_mode"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -6,6 +6,8 @@ Create Date: 2016-06-01 14:17:01.963181
"""
import uuid
# revision identifiers, used by Alembic.
from datetime import datetime
@@ -13,7 +15,6 @@ from alembic import op
from sqlalchemy import text
from app.hashing import hashpw
import uuid
revision = "0025_notify_service_data"
down_revision = "0024_add_research_mode_defaults"
@@ -10,8 +10,8 @@ Create Date: 2016-06-07 09:51:07.343334
revision = "0026_rename_notify_service"
down_revision = "0025_notify_service_data"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -14,8 +14,8 @@ from sqlalchemy import text
revision = "0028_fix_reg_template_history"
down_revision = "0026_rename_notify_service"
from alembic import op
import sqlalchemy as sa
from alembic import op
service_id = "d6aa2c68-a2d9-4437-ab19-3ae8eb202553"
user_id = "6af522d0-2915-4e52-83a3-3690455a5fe6"
+1 -1
View File
@@ -12,8 +12,8 @@ from sqlalchemy import text
revision = "0029_fix_email_from"
down_revision = "0028_fix_reg_template_history"
from alembic import op
import sqlalchemy as sa
from alembic import op
service_id = "d6aa2c68-a2d9-4437-ab19-3ae8eb202553"
@@ -13,8 +13,8 @@ from sqlalchemy.dialects import postgresql
revision = "0030_service_id_not_null"
down_revision = "0029_fix_email_from"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2016-06-20 10:39:50.892847
revision = "0031_store_personalisation"
down_revision = "0030_service_id_not_null"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2016-06-21 11:29:28.963615
revision = "0032_notification_created_status"
down_revision = "0031_store_personalisation"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
+1 -1
View File
@@ -10,8 +10,8 @@ Create Date: 2016-06-24 12:02:10.915817
revision = "0033_api_key_type"
down_revision = "0032_notification_created_status"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -10,8 +10,8 @@ Create Date: 2016-06-28 10:37:25.389020
revision = "0034_pwd_changed_at_not_null"
down_revision = "0033_api_key_type"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2016-06-29 10:48:55.955317
revision = "0035_notification_type"
down_revision = "0034_pwd_changed_at_not_null"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2016-07-01 16:01:16.892638
revision = "0036_notif_key_type_not_null"
down_revision = "0035_notification_type"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2016-06-30 14:55:33.811696
revision = "0037_service_sms_sender"
down_revision = "0036_notif_key_type_not_null"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -12,8 +12,8 @@ from sqlalchemy import text
revision = "0039_fix_notifications"
down_revision = "0038_test_api_key_type"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2016-07-07 13:15:35.503107
revision = "0042_notification_history"
down_revision = "0039_fix_notifications"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -10,8 +10,8 @@ Create Date: 2016-08-01 10:37:41.198070
revision = "0043_notification_indexes"
down_revision = "0042_notification_history"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,13 +10,13 @@ Create Date: 2016-07-15 13:28:41.441009
revision = "0044_jobs_to_notification_hist"
down_revision = "0043_notification_indexes"
from alembic import op
import datetime
import uuid
from alembic import op
from sqlalchemy.orm.session import Session
import uuid
import datetime
from app.models import Job, Template, NotificationHistory
from app.models import Job, NotificationHistory, Template
def upgrade():
+2 -2
View File
@@ -7,13 +7,13 @@ Create Date: 2016-08-02 16:36:42.455838
"""
# revision identifiers, used by Alembic.
from sqlalchemy import text, bindparam
from sqlalchemy import bindparam, text
revision = "0045_billable_units"
down_revision = "0044_jobs_to_notification_hist"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.orm.session import Session
from app.models import Service
@@ -10,8 +10,8 @@ Create Date: 2016-08-04 12:00:43.682610
revision = "0046_organisations_and_branding"
down_revision = "0045_billable_units"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -10,8 +10,8 @@ Create Date: 2016-08-24 13:21:51.744526
revision = "0048_job_scheduled_time"
down_revision = "0046_organisations_and_branding"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
+1 -1
View File
@@ -10,8 +10,8 @@ Create Date: 2016-08-24 13:21:51.744526
revision = "0050_index_for_stats"
down_revision = "0048_job_scheduled_time"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
+1 -1
View File
@@ -10,8 +10,8 @@ Create Date: 2016-08-25 15:56:31.779399
revision = "0052_drop_jobs_status"
down_revision = "0051_set_job_status"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -10,8 +10,8 @@ Create Date: 2016-09-01 14:34:06.839381
revision = "0053_cancelled_job_status"
down_revision = "0052_drop_jobs_status"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -10,8 +10,8 @@ Create Date: 2016-08-25 15:56:31.779399
revision = "0054_perform_drop_status_column"
down_revision = "0053_cancelled_job_status"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -10,8 +10,8 @@ Create Date: 2016-09-20 12:12:30.838095
revision = "0055_service_whitelist"
down_revision = "0054_perform_drop_status_column"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
+1 -1
View File
@@ -10,8 +10,8 @@ Create Date: 2016-10-04 09:43:42.321138
revision = "0056_minor_updates"
down_revision = "0055_service_whitelist"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
+1 -1
View File
@@ -10,8 +10,8 @@ Create Date: 2016-10-25 17:37:27.660723
revision = "0058_add_letters_flag"
down_revision = "0056_minor_updates"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -6,8 +6,8 @@ Create Date: 2016-11-07 16:13:18.961527
"""
from alembic import op
import sqlalchemy as sa
from alembic import op
# revision identifiers, used by Alembic.
revision = "0060_add_letter_template_type"
@@ -10,8 +10,8 @@ Create Date: 2016-11-17 13:19:25.820617
revision = "0061_add_client_reference"
down_revision = "0060_add_letter_template_type"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -13,8 +13,8 @@ Create Date: 2016-12-14 13:00:24.226990
revision = "0062_provider_details_history"
down_revision = "0061_add_client_reference"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -10,8 +10,8 @@ Create Date: 2017-01-10 15:39:30.909308
revision = "0063_templates_process_type"
down_revision = "0062_provider_details_history"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2017-01-16 11:08:00.520678
revision = "0064_update_template_process"
down_revision = "0063_templates_process_type"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2017-02-17 11:48:40.669235
revision = "0065_users_current_session_id"
down_revision = "0064_update_template_process"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -10,8 +10,8 @@ Create Date: 2017-02-28 11:23:40.299110
revision = "0067_service_contact_block"
down_revision = "0065_users_current_session_id"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2017-03-06 17:19:28.492005
revision = "0068_add_created_by_to_provider"
down_revision = "0067_service_contact_block"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -10,8 +10,8 @@ Create Date: 2017-03-10 16:15:22.153948
revision = "0069_add_dvla_job_status"
down_revision = "0068_add_created_by_to_provider"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2017-03-10 16:15:22.153948
revision = "0070_fix_notify_user_email"
down_revision = "0069_add_dvla_job_status"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2017-03-10 16:15:22.153948
revision = "0071_add_job_error_state"
down_revision = "0070_fix_notify_user_email"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
+1 -1
View File
@@ -10,8 +10,8 @@ Create Date: 2017-04-19 15:25:45.155886
revision = "0072_add_dvla_orgs"
down_revision = "0071_add_job_error_state"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2017-10-25 17:37:27.660723
revision = "0073_add_international_sms_flag"
down_revision = "0072_add_dvla_orgs"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -14,8 +14,8 @@ from sqlalchemy import text
revision = "0075_create_rates_table"
down_revision = "0073_add_international_sms_flag"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -10,8 +10,8 @@ Create Date: 2017-04-25 09:44:13.194164
revision = "0076_add_intl_flag_to_provider"
down_revision = "0075_create_rates_table"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2017-04-25 11:34:43.229494
revision = "0077_add_intl_notification"
down_revision = "0076_add_intl_flag_to_provider"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2017-04-24 16:55:20.731069
revision = "0078_sent_notification_status"
down_revision = "0077_add_intl_notification"
from alembic import op
import sqlalchemy as sa
from alembic import op
enum_name = "notify_status_type"
tmp_name = "tmp_" + enum_name
@@ -10,8 +10,8 @@ Create Date: 2017-05-02 14:50:04.070874
revision = "0081_noti_status_as_enum"
down_revision = "0078_sent_notification_status"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -9,10 +9,9 @@ Create Date: 2017-05-10 16:06:04.070874
# revision identifiers, used by Alembic.
from datetime import datetime
from flask import current_app
from alembic import op
import sqlalchemy as sa
from alembic import op
from flask import current_app
from sqlalchemy import text
revision = "0082_add_go_live_template"
@@ -10,8 +10,8 @@ Create Date: 2017-05-12 11:29:32.664811
revision = "0083_add_perm_types_and_svc_perm"
down_revision = "0082_add_go_live_template"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
+1 -1
View File
@@ -10,8 +10,8 @@ Create Date: 2017-05-12 13:16:14.147368
revision = "0084_add_job_stats"
down_revision = "0083_add_perm_types_and_svc_perm"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -10,8 +10,8 @@ Create Date: 2017-05-22 10:23:43.939050
revision = "0085_update_incoming_to_inbound"
down_revision = "0084_add_job_stats"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -6,8 +6,8 @@ Create Date: 2017-05-23 10:37:00.404087
"""
from alembic import op
import sqlalchemy as sa
from alembic import op
revision = "0086_add_norm_to_notification"
down_revision = "0085_update_incoming_to_inbound"
@@ -5,8 +5,8 @@ Revises: 0086_add_norm_to_notification
Create Date: 2017-05-15 12:50:20.041950
"""
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
revision = "0087_scheduled_notifications"
+1 -1
View File
@@ -10,8 +10,8 @@ Create Date: 2017-05-22 11:28:53.471004
revision = "0090_inbound_sms"
down_revision = "0089_govuk_sms_sender"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -10,8 +10,8 @@ Create Date: 2017-06-02 16:07:35.445423
revision = "0092_add_inbound_provider"
down_revision = "0090_inbound_sms"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
+1 -1
View File
@@ -5,8 +5,8 @@ Revises: 0092_add_inbound_provider
Create Date: 2017-06-06 14:37:30.051647
"""
from alembic import op
import sqlalchemy as sa
from alembic import op
# revision identifiers, used by Alembic.
revision = "0094_job_stats_update"
@@ -12,8 +12,8 @@ from sqlalchemy import text
revision = "0095_migrate_existing_svc_perms"
down_revision = "0094_job_stats_update"
from alembic import op
import sqlalchemy as sa
from alembic import op
migration_date = "2017-05-26 17:30:00.000000"
+1 -1
View File
@@ -10,8 +10,8 @@ Create Date: 2017-06-08 15:46:49.637642
revision = "0096_update_job_stats"
down_revision = "0095_migrate_existing_svc_perms"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -10,8 +10,8 @@ Create Date: 2017-06-02 16:50:11.698423
revision = "0097_notnull_inbound_provider"
down_revision = "0096_update_job_stats"
from alembic import op
import sqlalchemy as sa
from alembic import op
def upgrade():
@@ -5,8 +5,8 @@ Revises: 0097_notnull_inbound_provider
Create Date: 2017-06-13 15:02:33.609656
"""
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
revision = "0098_service_inbound_api"
+1 -1
View File
@@ -12,8 +12,8 @@ from sqlalchemy import text
revision = "0099_tfl_dar"
down_revision = "0098_service_inbound_api"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
TFL_DAR_ID = "1d70f564-919b-4c68-8bdf-b8520d92516e"
@@ -10,8 +10,8 @@ Create Date: 2017-06-13 10:53:25.032202
revision = "0100_notification_created_by"
down_revision = "0099_tfl_dar"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -10,8 +10,8 @@ Create Date: 2017-06-27 15:37:28.878359
revision = "db6d9d9f06bc"
down_revision = "0101_een_logo"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -12,10 +12,10 @@ from sqlalchemy import text
revision = "0103_add_historical_redact"
down_revision = "db6d9d9f06bc"
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
from alembic import op
from flask import current_app
from sqlalchemy.dialects import postgresql
def upgrade():
+2 -2
View File
@@ -10,10 +10,10 @@ Create Date: 2017-06-29 12:44:16.815039
revision = "0105_opg_letter_org"
down_revision = "0103_add_historical_redact"
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
from alembic import op
from flask import current_app
from sqlalchemy.dialects import postgresql
def upgrade():
@@ -10,8 +10,8 @@ Create Date: 2017-07-10 14:25:58.494636
revision = "0107_drop_template_stats"
down_revision = "0106_null_noti_status"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -10,8 +10,8 @@ Create Date: 2017-07-06 10:14:35.188404
revision = "0108_change_logo_not_nullable"
down_revision = "0107_drop_template_stats"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -5,8 +5,8 @@ Revises: 0108_change_logo_not_nullable
Create Date: 2017-07-10 14:25:15.712055
"""
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
revision = "0109_rem_old_noti_status"
+1 -1
View File
@@ -10,8 +10,8 @@ Create Date: 2017-07-13 14:35:03.183659
revision = "0110_monthly_billing"
down_revision = "0109_rem_old_noti_status"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -10,8 +10,8 @@ Create Date: 2017-07-12 13:35:45.636618
revision = "0111_drop_old_service_flags"
down_revision = "0110_monthly_billing"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -6,8 +6,9 @@ Create Date: 2017-07-12 13:35:45.636618
"""
from datetime import datetime
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy import text
from app.dao.date_util import get_month_start_and_end_date_in_utc
@@ -10,8 +10,8 @@ Create Date: 2017-07-27 11:12:34.938086
revision = "0113_job_created_by_nullable"
down_revision = "0112_add_start_end_dates"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
@@ -5,8 +5,8 @@ Revises: 0113_job_created_by_nullable
Create Date: 2017-07-27 13:36:37.304344
"""
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql
revision = "0014_drop_monthly_billing_cols"
@@ -10,8 +10,8 @@ Create Date: 2017-08-10 17:30:01.507694
revision = "0115_add_inbound_numbers"
down_revision = "0014_drop_monthly_billing_cols"
from alembic import op
import sqlalchemy as sa
from alembic import op
from sqlalchemy.dialects import postgresql

Some files were not shown because too many files have changed in this diff Show More