mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-27 17:53:42 -04:00
Compare commits
13 Commits
1-26-26
...
87e4091ef1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
87e4091ef1 | ||
|
|
38bce0a994 | ||
|
|
f6e77c2546 | ||
|
|
2972678def | ||
|
|
e625661796 | ||
|
|
68f7bc3547 | ||
|
|
24ca958f30 | ||
|
|
746a891bc0 | ||
|
|
231d851969 | ||
|
|
3741b4cccf | ||
|
|
b88b75f20a | ||
|
|
04d8e8fc48 | ||
|
|
0c10e1cdde |
@@ -285,13 +285,11 @@ def process_delivery_receipts(self):
|
||||
retry_count = self.request.retries
|
||||
wait_time = 3600 * 2**retry_count
|
||||
|
||||
current_app.logger.exception(str(ex))
|
||||
|
||||
try:
|
||||
raise self.retry(ex=ex, countdown=wait_time)
|
||||
except self.MaxRetriesExceededError:
|
||||
current_app.logger.error(
|
||||
"Failed process delivery receipts after max retries"
|
||||
f"Failed process delivery receipts after max retries with exception {str(ex)}"
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -976,10 +976,8 @@ def dao_update_delivery_receipts(receipts, delivered):
|
||||
db.session.execute(stmt)
|
||||
db.session.commit()
|
||||
elapsed_time = (time() * 1000) - start_time_millis
|
||||
current_app.logger.info(
|
||||
f"#loadtestperformance batch update query time: \
|
||||
updated {len(receipts)} notification in {elapsed_time} ms"
|
||||
)
|
||||
current_app.logger.info(f"#loadtestperformance batch update query time: \
|
||||
updated {len(receipts)} notification in {elapsed_time} ms")
|
||||
|
||||
|
||||
def dao_close_out_delivery_receipts():
|
||||
|
||||
@@ -1240,12 +1240,10 @@ def get_service_message_ratio():
|
||||
messages_remaining = my_service.total_message_limit - messages_sent
|
||||
|
||||
if my_service.total_message_limit - messages_sent < 0:
|
||||
raise Exception(
|
||||
f"Math error get_service_message_ratio(), \
|
||||
raise Exception(f"Math error get_service_message_ratio(), \
|
||||
total {my_service.total_message_limit} \
|
||||
messages_sent {messages_sent} remaining {messages_remaining} \
|
||||
service_id {service_id} current_year {current_year}"
|
||||
)
|
||||
service_id {service_id} current_year {current_year}")
|
||||
|
||||
return {
|
||||
"messages_sent": messages_sent,
|
||||
|
||||
@@ -115,8 +115,7 @@ def upgrade():
|
||||
unique=False,
|
||||
)
|
||||
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
INSERT INTO notification_history
|
||||
(
|
||||
id,
|
||||
@@ -154,8 +153,7 @@ def upgrade():
|
||||
status,
|
||||
reference
|
||||
FROM notifications
|
||||
"""
|
||||
)
|
||||
""")
|
||||
### end Alembic commands ###
|
||||
|
||||
|
||||
|
||||
@@ -34,11 +34,9 @@ def upgrade():
|
||||
# caveats
|
||||
# only adjusts notifications for services that have never been in research mode. On live, research mode was
|
||||
# limited to only services that we have set up ourselves so deemed this acceptable.
|
||||
billable_services_query = text(
|
||||
"""
|
||||
billable_services_query = text("""
|
||||
SELECT id FROM services_history WHERE id NOT IN (SELECT id FROM services_history WHERE research_mode)
|
||||
"""
|
||||
)
|
||||
""")
|
||||
billable_services = conn.execute(billable_services_query)
|
||||
# set to 'null' if there are no billable services so we don't get a syntax error in the update statement
|
||||
service_ids = ",".join(f"{service.id}" for service in billable_services) or "null"
|
||||
@@ -102,11 +100,9 @@ def downgrade():
|
||||
# caveats
|
||||
# only adjusts notifications for services that have never been in research mode. On live, research mode was
|
||||
# limited to only services that we have set up ourselves
|
||||
billable_services = conn.execute(
|
||||
"""
|
||||
billable_services = conn.execute("""
|
||||
SELECT id FROM services_history WHERE id not in (select id from services_history where research_mode)
|
||||
"""
|
||||
)
|
||||
""")
|
||||
# set to 'null' if there are no billable services so we don't get a syntax error in the update statement
|
||||
service_ids = ",".join(f"{service.id}" for service in billable_services) or "null"
|
||||
|
||||
|
||||
@@ -42,14 +42,12 @@ def upgrade():
|
||||
op.execute("INSERT INTO branding_type VALUES ('govuk'), ('org'), ('both')")
|
||||
|
||||
# insert UKVI data as initial test data. hex and crest pulled from alphagov/whitehall
|
||||
op.execute(
|
||||
"""INSERT INTO organisation VALUES (
|
||||
op.execute("""INSERT INTO organisation VALUES (
|
||||
'9d25d02d-2915-4e98-874b-974e123e8536',
|
||||
'#9325b2',
|
||||
'ho_crest_27px_x2.png',
|
||||
'UK Visas and Immigration'
|
||||
)"""
|
||||
)
|
||||
)""")
|
||||
op.execute("UPDATE services SET branding='govuk'")
|
||||
op.execute("UPDATE services_history SET branding='govuk'")
|
||||
|
||||
|
||||
@@ -15,20 +15,16 @@ from alembic import op
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
UPDATE users
|
||||
SET email_address = 'testsender@dispostable.com'
|
||||
WHERE email_address = 'notify-service-user@digital.cabinet-office'
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
def downgrade():
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
UPDATE users
|
||||
SET email_address = 'notify-service-user@digital.cabinet-office'
|
||||
WHERE email_address = 'testsender@dispostable.com'
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
@@ -24,13 +24,11 @@ def upgrade():
|
||||
)
|
||||
|
||||
# insert initial values - HMG and Land Reg
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
INSERT INTO dvla_organisation VALUES
|
||||
('001', 'HM Government'),
|
||||
('500', 'Land Registry')
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
op.add_column(
|
||||
"services",
|
||||
|
||||
@@ -39,44 +39,36 @@ def upgrade():
|
||||
|
||||
conn = op.get_bind()
|
||||
|
||||
query = text(
|
||||
"""
|
||||
query = text("""
|
||||
INSERT INTO service_permissions (service_id, permission, created_at)
|
||||
SELECT id, 'sms', '2017-05-26 17:30:00.000000' FROM services
|
||||
WHERE id NOT IN (SELECT service_id FROM service_permissions
|
||||
WHERE service_id=id AND permission='sms')
|
||||
"""
|
||||
)
|
||||
""")
|
||||
conn.execute(query)
|
||||
|
||||
query = text(
|
||||
"""
|
||||
query = text("""
|
||||
INSERT INTO service_permissions (service_id, permission, created_at)
|
||||
SELECT id, 'email', '2017-05-26 17:30:00.000000' FROM services
|
||||
WHERE id NOT IN (SELECT service_id FROM service_permissions
|
||||
WHERE service_id=id AND permission='email')
|
||||
"""
|
||||
)
|
||||
""")
|
||||
conn.execute(query)
|
||||
|
||||
query = text(
|
||||
"""
|
||||
query = text("""
|
||||
INSERT INTO service_permissions (service_id, permission, created_at)
|
||||
SELECT id, 'letter', '2017-05-26 17:30:00.000000' FROM services
|
||||
WHERE can_send_letters AND id NOT IN (SELECT service_id FROM service_permissions
|
||||
WHERE service_id=id AND permission='letter')
|
||||
"""
|
||||
)
|
||||
""")
|
||||
conn.execute(query)
|
||||
|
||||
query = text(
|
||||
"""
|
||||
query = text("""
|
||||
INSERT INTO service_permissions (service_id, permission, created_at)
|
||||
SELECT id, 'international_sms', '2017-05-26 17:30:00.000000' FROM services
|
||||
WHERE can_send_international_sms AND id NOT IN (SELECT service_id FROM service_permissions
|
||||
WHERE service_id=id AND permission='international_sms')
|
||||
"""
|
||||
)
|
||||
""")
|
||||
conn.execute(query)
|
||||
|
||||
|
||||
|
||||
@@ -17,28 +17,24 @@ from sqlalchemy.dialects import postgresql
|
||||
|
||||
|
||||
def upgrade():
|
||||
query = text(
|
||||
"""
|
||||
query = text("""
|
||||
UPDATE job_statistics
|
||||
SET sent = sms_sent + emails_sent + letters_sent,
|
||||
delivered = sms_delivered + emails_delivered,
|
||||
failed = sms_failed + emails_failed + letters_failed
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
conn = op.get_bind()
|
||||
conn.execute(query)
|
||||
|
||||
|
||||
def downgrade():
|
||||
query = text(
|
||||
"""
|
||||
query = text("""
|
||||
UPDATE job_statistics
|
||||
SET sent = 0,
|
||||
delivered = 0,
|
||||
failed = 0
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
conn = op.get_bind()
|
||||
conn.execute(query)
|
||||
|
||||
@@ -23,14 +23,12 @@ def upgrade():
|
||||
conn = op.get_bind()
|
||||
input_params = {"tfl_dar_id": TFL_DAR_ID}
|
||||
conn.execute(
|
||||
text(
|
||||
"""INSERT INTO organisation VALUES (
|
||||
text("""INSERT INTO organisation VALUES (
|
||||
:tfl_dar_id,
|
||||
'',
|
||||
'tfl_dar_x2.png',
|
||||
'tfl'
|
||||
)"""
|
||||
),
|
||||
)"""),
|
||||
input_params,
|
||||
)
|
||||
|
||||
@@ -39,10 +37,8 @@ def downgrade():
|
||||
conn = op.get_bind()
|
||||
input_params = {"tfl_dar_id": TFL_DAR_ID}
|
||||
conn.execute(
|
||||
text(
|
||||
"""
|
||||
text("""
|
||||
DELETE FROM organisation WHERE "id" = :tfl_dar_id
|
||||
"""
|
||||
),
|
||||
"""),
|
||||
input_params,
|
||||
)
|
||||
|
||||
@@ -20,14 +20,12 @@ def upgrade():
|
||||
input_params = {"network_id": ENTERPRISE_EUROPE_NETWORK_ID}
|
||||
conn = op.get_bind()
|
||||
conn.execute(
|
||||
text(
|
||||
"""INSERT INTO organisation VALUES (
|
||||
text("""INSERT INTO organisation VALUES (
|
||||
:network_id,
|
||||
'',
|
||||
'een_x2.png',
|
||||
'een'
|
||||
)"""
|
||||
),
|
||||
)"""),
|
||||
input_params,
|
||||
)
|
||||
|
||||
@@ -36,10 +34,8 @@ def downgrade():
|
||||
input_params = {"network_id": ENTERPRISE_EUROPE_NETWORK_ID}
|
||||
conn = op.get_bind()
|
||||
conn.execute(
|
||||
text(
|
||||
"""
|
||||
text("""
|
||||
DELETE FROM organisation WHERE "id" = :network_id
|
||||
"""
|
||||
),
|
||||
"""),
|
||||
input_params,
|
||||
)
|
||||
|
||||
@@ -22,8 +22,7 @@ def upgrade():
|
||||
conn = op.get_bind()
|
||||
input_params = {"notify_user_id": current_app.config["NOTIFY_USER_ID"]}
|
||||
conn.execute(
|
||||
text(
|
||||
"""
|
||||
text("""
|
||||
INSERT INTO template_redacted
|
||||
(
|
||||
template_id,
|
||||
@@ -40,8 +39,7 @@ def upgrade():
|
||||
templates
|
||||
LEFT JOIN template_redacted on template_redacted.template_id = templates.id
|
||||
WHERE template_redacted.template_id IS NULL
|
||||
"""
|
||||
),
|
||||
"""),
|
||||
input_params,
|
||||
)
|
||||
|
||||
|
||||
@@ -17,12 +17,10 @@ from sqlalchemy.dialects import postgresql
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
INSERT INTO dvla_organisation VALUES
|
||||
('002', 'Office of the Public Guardian')
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
def downgrade():
|
||||
|
||||
@@ -49,13 +49,11 @@ def upgrade():
|
||||
)
|
||||
|
||||
# populate govuk seeded service
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
INSERT INTO service_sms_senders
|
||||
(id, sms_sender, service_id, is_default, inbound_number_id, created_at, updated_at)
|
||||
VALUES ('286d6176-adbe-7ea7-ba26-b7606ee5e2a4', 'GOVUK', 'd6aa2c68-a2d9-4437-ab19-3ae8eb202553', true, null, now(), null)
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
def downgrade():
|
||||
|
||||
@@ -25,14 +25,12 @@ def upgrade():
|
||||
"notify_service_id": NOTIFY_SERVICE_ID,
|
||||
}
|
||||
conn.execute(
|
||||
text(
|
||||
"""
|
||||
text("""
|
||||
INSERT INTO service_email_reply_to
|
||||
(id, service_id, email_address, is_default, created_at)
|
||||
VALUES
|
||||
(:email_reply_to, :notify_service_id, 'testsender@dispostable.com', 'f', NOW())
|
||||
"""
|
||||
),
|
||||
"""),
|
||||
input_params,
|
||||
)
|
||||
|
||||
@@ -43,11 +41,9 @@ def downgrade():
|
||||
"email_reply_to": EMAIL_REPLY_TO_ID,
|
||||
}
|
||||
conn.execute(
|
||||
text(
|
||||
"""
|
||||
text("""
|
||||
DELETE FROM service_email_reply_to
|
||||
WHERE id = :email_reply_to
|
||||
"""
|
||||
),
|
||||
"""),
|
||||
input_params,
|
||||
)
|
||||
|
||||
@@ -27,34 +27,28 @@ def upgrade():
|
||||
conn = op.get_bind()
|
||||
input_params = {"default_sms_sender": default_sms_sender}
|
||||
conn.execute(
|
||||
text(
|
||||
"""
|
||||
text("""
|
||||
update services set prefix_sms = True
|
||||
where id in (
|
||||
select service_id from service_sms_senders
|
||||
where is_default = True and sms_sender = :default_sms_sender
|
||||
)
|
||||
"""
|
||||
),
|
||||
"""),
|
||||
input_params,
|
||||
)
|
||||
conn.execute(
|
||||
text(
|
||||
"""
|
||||
text("""
|
||||
update services set prefix_sms = False
|
||||
where id in (
|
||||
select service_id from service_sms_senders
|
||||
where is_default = True and sms_sender != :default_sms_sender
|
||||
)
|
||||
"""
|
||||
),
|
||||
"""),
|
||||
input_params,
|
||||
)
|
||||
|
||||
|
||||
def downgrade():
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
UPDATE services set prefix_sms = null
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
@@ -16,26 +16,22 @@ def upgrade():
|
||||
op.drop_constraint(
|
||||
"notifications_template_id_fkey", "notifications", type_="foreignkey"
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
ALTER TABLE notifications ADD CONSTRAINT "notifications_templates_history_fkey"
|
||||
FOREIGN KEY ("template_id", "template_version") REFERENCES "templates_history" ("id", "version")
|
||||
NOT VALID
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
op.drop_constraint(
|
||||
"notification_history_template_id_fkey",
|
||||
"notification_history",
|
||||
type_="foreignkey",
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
ALTER TABLE notification_history ADD CONSTRAINT "notification_history_templates_history_fkey"
|
||||
FOREIGN KEY ("template_id", "template_version") REFERENCES "templates_history" ("id", "version")
|
||||
NOT VALID
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
def downgrade():
|
||||
|
||||
@@ -20,13 +20,11 @@ def upgrade():
|
||||
conn = op.get_bind()
|
||||
input_params = {"id": current_app.config["NOTIFY_SERVICE_ID"]}
|
||||
conn.execute(
|
||||
text(
|
||||
"""
|
||||
text("""
|
||||
update services
|
||||
set prefix_sms = false
|
||||
where id = :id
|
||||
"""
|
||||
),
|
||||
"""),
|
||||
input_params,
|
||||
)
|
||||
|
||||
@@ -49,12 +47,10 @@ def downgrade():
|
||||
conn = op.get_bind()
|
||||
input_params = {"id": current_app.config["NOTIFY_SERVICE_ID"]}
|
||||
conn.execute(
|
||||
text(
|
||||
"""
|
||||
text("""
|
||||
update services
|
||||
set prefix_sms = null
|
||||
where id = :id
|
||||
"""
|
||||
),
|
||||
"""),
|
||||
input_params,
|
||||
)
|
||||
|
||||
@@ -15,45 +15,33 @@ down_revision = "0148_add_letters_as_pdf_svc_perm"
|
||||
|
||||
def upgrade():
|
||||
op.add_column("services", sa.Column("crown", sa.Boolean(), nullable=True))
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
update services set crown = True
|
||||
where organisation_type = 'central'
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
update services set crown = True
|
||||
where organisation_type is null
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
update services set crown = False
|
||||
where crown is null
|
||||
"""
|
||||
)
|
||||
""")
|
||||
op.alter_column("services", "crown", nullable=False)
|
||||
|
||||
op.add_column("services_history", sa.Column("crown", sa.Boolean(), nullable=True))
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
update services_history set crown = True
|
||||
where organisation_type = 'central'
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
update services_history set crown = True
|
||||
where organisation_type is null
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
update services_history set crown = False
|
||||
where crown is null
|
||||
"""
|
||||
)
|
||||
""")
|
||||
op.alter_column("services_history", "crown", nullable=False)
|
||||
|
||||
|
||||
|
||||
@@ -22,8 +22,7 @@ def upgrade():
|
||||
conn = op.get_bind()
|
||||
input_params = {"notify_user": current_app.config["NOTIFY_USER_ID"]}
|
||||
conn.execute(
|
||||
text(
|
||||
"""
|
||||
text("""
|
||||
INSERT INTO template_redacted
|
||||
(
|
||||
template_id,
|
||||
@@ -40,8 +39,7 @@ def upgrade():
|
||||
templates
|
||||
LEFT JOIN template_redacted on template_redacted.template_id = templates.id
|
||||
WHERE template_redacted.template_id IS NULL
|
||||
"""
|
||||
),
|
||||
"""),
|
||||
input_params,
|
||||
)
|
||||
|
||||
|
||||
@@ -40,20 +40,16 @@ def upgrade():
|
||||
),
|
||||
sa.PrimaryKeyConstraint("service_id"),
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
INSERT INTO email_branding (id, colour, logo, name)
|
||||
SELECT id, colour, logo, name
|
||||
FROM organisation
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
INSERT INTO service_email_branding (service_id, email_branding_id)
|
||||
SELECT id, organisation_id
|
||||
FROM services where organisation_id is not null
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
def downgrade():
|
||||
|
||||
@@ -15,8 +15,7 @@ down_revision = "0171_add_org_invite_template"
|
||||
|
||||
def upgrade():
|
||||
op.get_bind()
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
update templates
|
||||
set process_type = 'normal'
|
||||
where templates.id in (
|
||||
@@ -24,8 +23,7 @@ def upgrade():
|
||||
join templates_history on templates.id=templates_history.id
|
||||
where templates_history.name = 'Example text message template'
|
||||
)
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
def downgrade():
|
||||
|
||||
@@ -71,8 +71,7 @@ def upgrade():
|
||||
)
|
||||
|
||||
# Insert data into table
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
INSERT into dm_datetime (
|
||||
SELECT
|
||||
datum AS bst_date,
|
||||
@@ -104,8 +103,7 @@ def upgrade():
|
||||
) DQ
|
||||
ORDER BY bst_date
|
||||
);
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
def downgrade():
|
||||
|
||||
@@ -16,14 +16,11 @@ down_revision = "0182_add_upload_document_perm"
|
||||
|
||||
def upgrade():
|
||||
# Drop the old dm_datetime table and create a new one
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
delete from dm_datetime where 1=1;
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
INSERT into dm_datetime (
|
||||
SELECT
|
||||
datum AS bst_date,
|
||||
@@ -55,8 +52,7 @@ def upgrade():
|
||||
) DQ
|
||||
ORDER BY bst_date
|
||||
);
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
op.drop_constraint("ft_billing_pkey", "ft_billing", type_="primary")
|
||||
|
||||
|
||||
@@ -14,8 +14,7 @@ from alembic import op
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
UPDATE
|
||||
jobs
|
||||
SET
|
||||
@@ -24,8 +23,7 @@ def upgrade():
|
||||
processing_started IS NULL
|
||||
AND
|
||||
job_status = 'in progress'
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
def downgrade():
|
||||
|
||||
@@ -17,16 +17,14 @@ def upgrade():
|
||||
conn = op.get_bind()
|
||||
input_params = {"branding_org": BrandType.ORG.value}
|
||||
conn.execute(
|
||||
text(
|
||||
"""
|
||||
text("""
|
||||
update
|
||||
email_branding
|
||||
set
|
||||
brand_type = :branding_org
|
||||
where
|
||||
brand_type is null
|
||||
"""
|
||||
),
|
||||
"""),
|
||||
input_params,
|
||||
)
|
||||
|
||||
|
||||
@@ -19,25 +19,21 @@ def upgrade():
|
||||
op.alter_column("services_history", "branding", nullable=True)
|
||||
op.alter_column("services", "branding", nullable=True)
|
||||
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
update
|
||||
email_branding
|
||||
set
|
||||
brand_type = 'org'
|
||||
where
|
||||
brand_type = 'govuk'
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
delete from
|
||||
branding_type
|
||||
where
|
||||
name = 'govuk'
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
def downgrade():
|
||||
@@ -56,12 +52,10 @@ def downgrade():
|
||||
op.alter_column("services", "branding", nullable=False)
|
||||
op.alter_column("services_history", "branding", nullable=False)
|
||||
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
insert into
|
||||
branding_type
|
||||
(name)
|
||||
values
|
||||
('govuk')
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
@@ -11,16 +11,14 @@ down_revision = "0222_drop_service_branding"
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
update
|
||||
email_branding
|
||||
set
|
||||
domain = null
|
||||
where
|
||||
domain = ''
|
||||
"""
|
||||
)
|
||||
""")
|
||||
op.create_unique_constraint(
|
||||
"uq_email_branding_domain", "email_branding", ["domain"]
|
||||
)
|
||||
|
||||
@@ -12,14 +12,12 @@ down_revision = "0226_service_postage"
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
update
|
||||
services
|
||||
set
|
||||
postage = 'second'
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
op.create_check_constraint(
|
||||
"ck_services_postage", "services", "postage in ('second', 'first')"
|
||||
|
||||
@@ -13,8 +13,7 @@ down_revision = "0228_notification_postage"
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
ALTER TABLE notifications ADD CONSTRAINT "chk_notifications_postage_null"
|
||||
CHECK (
|
||||
CASE WHEN notification_type = 'letter' THEN
|
||||
@@ -24,8 +23,7 @@ def upgrade():
|
||||
END
|
||||
)
|
||||
NOT VALID
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
def downgrade():
|
||||
|
||||
@@ -13,8 +13,7 @@ down_revision = "0230_noti_postage_constraint_1"
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
ALTER TABLE notification_history ADD CONSTRAINT "chk_notification_history_postage_null"
|
||||
CHECK (
|
||||
CASE WHEN notification_type = 'letter' THEN
|
||||
@@ -24,8 +23,7 @@ def upgrade():
|
||||
END
|
||||
)
|
||||
NOT VALID
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
def downgrade():
|
||||
|
||||
@@ -49,11 +49,9 @@ def upgrade():
|
||||
)
|
||||
|
||||
for org_id, org_filename in LOGOS.items():
|
||||
query = text(
|
||||
"""
|
||||
query = text("""
|
||||
UPDATE dvla_organisation SET filename = :filename WHERE id = :id
|
||||
"""
|
||||
)
|
||||
""")
|
||||
conn.execute(query, {"filename": org_filename, "id": org_id})
|
||||
|
||||
|
||||
|
||||
@@ -18,8 +18,7 @@ def upgrade():
|
||||
op.execute("INSERT INTO service_permission_types VALUES ('choose_postage')")
|
||||
op.add_column("templates", sa.Column("postage", sa.String(), nullable=True))
|
||||
op.add_column("templates_history", sa.Column("postage", sa.String(), nullable=True))
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
ALTER TABLE templates ADD CONSTRAINT "chk_templates_postage_null"
|
||||
CHECK (
|
||||
CASE WHEN template_type = 'letter' THEN
|
||||
@@ -29,10 +28,8 @@ def upgrade():
|
||||
postage is null
|
||||
END
|
||||
)
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
ALTER TABLE templates_history ADD CONSTRAINT "chk_templates_history_postage_null"
|
||||
CHECK (
|
||||
CASE WHEN template_type = 'letter' THEN
|
||||
@@ -42,8 +39,7 @@ def upgrade():
|
||||
postage is null
|
||||
END
|
||||
)
|
||||
"""
|
||||
)
|
||||
""")
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
|
||||
@@ -15,10 +15,8 @@ down_revision = "0252_letter_branding_table"
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.execute(
|
||||
"""UPDATE templates SET postage = services.postage
|
||||
FROM services WHERE template_type = 'letter' AND service_id = services.id"""
|
||||
)
|
||||
op.execute("""UPDATE templates SET postage = services.postage
|
||||
FROM services WHERE template_type = 'letter' AND service_id = services.id""")
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
|
||||
@@ -13,8 +13,7 @@ down_revision = "0253_set_template_postage"
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
INSERT INTO
|
||||
service_permissions (service_id, permission, created_at)
|
||||
SELECT
|
||||
@@ -30,8 +29,7 @@ def upgrade():
|
||||
service_id = services.id and
|
||||
permission = 'edit_folders'
|
||||
)
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
def downgrade():
|
||||
|
||||
@@ -15,10 +15,8 @@ down_revision = "0254_folders_for_all"
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.execute(
|
||||
"""UPDATE templates_history SET postage = services.postage
|
||||
FROM services WHERE template_type = 'letter' AND service_id = services.id"""
|
||||
)
|
||||
op.execute("""UPDATE templates_history SET postage = services.postage
|
||||
FROM services WHERE template_type = 'letter' AND service_id = services.id""")
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
|
||||
@@ -13,21 +13,17 @@ from alembic import op
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.execute(
|
||||
"""INSERT INTO letter_branding (id, name, filename, domain)
|
||||
op.execute("""INSERT INTO letter_branding (id, name, filename, domain)
|
||||
SELECT uuid_in(md5(random()::text)::cstring), name, filename, null
|
||||
from dvla_organisation"""
|
||||
)
|
||||
from dvla_organisation""")
|
||||
|
||||
op.execute(
|
||||
"""INSERT INTO service_letter_branding (service_id, letter_branding_id)
|
||||
op.execute("""INSERT INTO service_letter_branding (service_id, letter_branding_id)
|
||||
SELECT S.id, LB.id
|
||||
FROM services s
|
||||
JOIN dvla_organisation d on (s.dvla_organisation_id = d.id)
|
||||
JOIN letter_branding lb on (lb.filename = d.filename)
|
||||
WHERE d.id != '001'
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
def downgrade():
|
||||
|
||||
@@ -19,13 +19,10 @@ def upgrade():
|
||||
op.drop_column("services_history", "postage")
|
||||
op.execute("DELETE FROM service_permissions WHERE permission = 'choose_postage'")
|
||||
op.execute("DELETE FROM service_permission_types WHERE name = 'choose_postage'")
|
||||
op.execute(
|
||||
"""UPDATE templates_history SET postage = templates.postage
|
||||
op.execute("""UPDATE templates_history SET postage = templates.postage
|
||||
FROM templates WHERE templates_history.id = templates.id AND templates_history.template_type = 'letter'
|
||||
AND templates_history.postage is null"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
AND templates_history.postage is null""")
|
||||
op.execute("""
|
||||
ALTER TABLE templates ADD CONSTRAINT "chk_templates_postage"
|
||||
CHECK (
|
||||
CASE WHEN template_type = 'letter' THEN
|
||||
@@ -34,10 +31,8 @@ def upgrade():
|
||||
postage is null
|
||||
END
|
||||
)
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
ALTER TABLE templates_history ADD CONSTRAINT "chk_templates_history_postage"
|
||||
CHECK (
|
||||
CASE WHEN template_type = 'letter' THEN
|
||||
@@ -46,18 +41,13 @@ def upgrade():
|
||||
postage is null
|
||||
END
|
||||
)
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
ALTER TABLE templates DROP CONSTRAINT "chk_templates_postage_null"
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
ALTER TABLE templates_history DROP CONSTRAINT "chk_templates_history_postage_null"
|
||||
"""
|
||||
)
|
||||
""")
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
@@ -76,8 +66,7 @@ def downgrade():
|
||||
),
|
||||
)
|
||||
op.execute("INSERT INTO service_permission_types VALUES ('choose_postage')")
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
ALTER TABLE templates ADD CONSTRAINT "chk_templates_postage_null"
|
||||
CHECK (
|
||||
CASE WHEN template_type = 'letter' THEN
|
||||
@@ -87,10 +76,8 @@ def downgrade():
|
||||
postage is null
|
||||
END
|
||||
)
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
ALTER TABLE templates_history ADD CONSTRAINT "chk_templates_history_postage_null"
|
||||
CHECK (
|
||||
CASE WHEN template_type = 'letter' THEN
|
||||
@@ -100,16 +87,11 @@ def downgrade():
|
||||
postage is null
|
||||
END
|
||||
)
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
ALTER TABLE templates DROP CONSTRAINT "chk_templates_postage"
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
ALTER TABLE templates_history DROP CONSTRAINT "chk_templates_history_postage"
|
||||
"""
|
||||
)
|
||||
""")
|
||||
# ### end Alembic commands ###
|
||||
|
||||
@@ -33,8 +33,7 @@ def downgrade():
|
||||
sa.PrimaryKeyConstraint("id", name="dvla_organisation_pkey"),
|
||||
)
|
||||
# can't repopulate the services, but we can put the static data back in dvla_organisation
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
INSERT INTO dvla_organisation VALUES
|
||||
('001', 'HM Government', 'hm-government'),
|
||||
('002', 'Office of the Public Guardian', 'opg'),
|
||||
@@ -77,8 +76,7 @@ def downgrade():
|
||||
('528', 'North Yorkshire Council', 'north-yorkshire'),
|
||||
('529', 'Redbridge Council', 'redbridge'),
|
||||
('530', 'Wigan Council', 'wigan')
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
op.add_column(
|
||||
"services_history",
|
||||
|
||||
@@ -21,8 +21,7 @@ def downgrade():
|
||||
conn = op.get_bind()
|
||||
input_params = {"permission": "edit_folders"}
|
||||
conn.execute(
|
||||
text(
|
||||
"""
|
||||
text("""
|
||||
INSERT INTO
|
||||
service_permissions (service_id, permission, created_at)
|
||||
SELECT
|
||||
@@ -38,7 +37,6 @@ def downgrade():
|
||||
service_id = services.id and
|
||||
permission = :permission
|
||||
)
|
||||
"""
|
||||
),
|
||||
"""),
|
||||
input_params,
|
||||
)
|
||||
|
||||
@@ -29,41 +29,33 @@ def upgrade():
|
||||
nullable=True,
|
||||
server_default=sa.null(),
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
UPDATE
|
||||
services
|
||||
SET
|
||||
consent_to_research = null
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
UPDATE
|
||||
services_history
|
||||
SET
|
||||
consent_to_research = null
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
def downgrade():
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
UPDATE
|
||||
services
|
||||
SET
|
||||
consent_to_research = false
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
UPDATE
|
||||
services_history
|
||||
SET
|
||||
consent_to_research = false
|
||||
"""
|
||||
)
|
||||
""")
|
||||
op.alter_column(
|
||||
"services_history",
|
||||
"consent_to_research",
|
||||
|
||||
@@ -15,8 +15,7 @@ from alembic import op
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
UPDATE
|
||||
services
|
||||
SET
|
||||
@@ -28,17 +27,14 @@ def upgrade():
|
||||
services_history.version = 1 and
|
||||
services_history.created_by_id = users.id
|
||||
;
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
def downgrade():
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
UPDATE
|
||||
services
|
||||
SET
|
||||
count_as_live = true
|
||||
;
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
@@ -15,19 +15,15 @@ from alembic import op
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.execute(
|
||||
"""UPDATE organisation SET email_branding_id = email_branding.id
|
||||
op.execute("""UPDATE organisation SET email_branding_id = email_branding.id
|
||||
FROM email_branding
|
||||
WHERE email_branding.domain in (SELECT domain FROM domain WHERE domain.organisation_id = organisation.id)
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
op.execute(
|
||||
"""UPDATE organisation SET letter_branding_id = letter_branding.id
|
||||
op.execute("""UPDATE organisation SET letter_branding_id = letter_branding.id
|
||||
FROM letter_branding
|
||||
WHERE letter_branding.domain in (SELECT domain FROM domain WHERE domain.organisation_id = organisation.id)
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
def downgrade():
|
||||
|
||||
@@ -25,8 +25,7 @@ def downgrade():
|
||||
op.execute("INSERT INTO service_permission_types values('precompiled_letter')")
|
||||
input_params = {"permission": "precompiled_letter"}
|
||||
conn.execute(
|
||||
text(
|
||||
"""
|
||||
text("""
|
||||
INSERT INTO
|
||||
service_permissions (service_id, permission, created_at)
|
||||
SELECT
|
||||
@@ -42,7 +41,6 @@ def downgrade():
|
||||
service_id = services.id and
|
||||
permission = :permission
|
||||
)
|
||||
"""
|
||||
),
|
||||
"""),
|
||||
input_params,
|
||||
)
|
||||
|
||||
@@ -13,15 +13,13 @@ down_revision = "0296_agreement_signed_by_person"
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
INSERT INTO template_redacted (template_id, redact_personalisation, updated_at, updated_by_id)
|
||||
SELECT templates.id, FALSE, now(), templates.created_by_id
|
||||
FROM templates
|
||||
WHERE templates.id NOT IN (SELECT template_id FROM template_redacted WHERE template_id = templates.id)
|
||||
;
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
def downgrade():
|
||||
|
||||
@@ -136,8 +136,7 @@ def upgrade():
|
||||
"user_id": current_app.config["NOTIFY_USER_ID"],
|
||||
}
|
||||
conn.execute(
|
||||
text(
|
||||
"""
|
||||
text("""
|
||||
INSERT INTO template_redacted
|
||||
(
|
||||
template_id,
|
||||
@@ -145,8 +144,7 @@ def upgrade():
|
||||
updated_at,
|
||||
updated_by_id
|
||||
) VALUES ( :template_id, false, current_timestamp, :user_id )
|
||||
"""
|
||||
),
|
||||
"""),
|
||||
input_params,
|
||||
)
|
||||
|
||||
|
||||
@@ -18,27 +18,23 @@ environment = os.environ["NOTIFY_ENVIRONMENT"]
|
||||
|
||||
def upgrade():
|
||||
if environment not in ["live", "production"]:
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
UPDATE
|
||||
organisation
|
||||
SET
|
||||
organisation_type = 'nhs_local'
|
||||
WHERE
|
||||
organisation.organisation_type = 'nhs'
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
UPDATE
|
||||
services
|
||||
SET
|
||||
organisation_type = 'nhs_local'
|
||||
WHERE
|
||||
services.organisation_type = 'nhs'
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
op.alter_column(
|
||||
"organisation_types",
|
||||
@@ -81,24 +77,20 @@ def downgrade():
|
||||
)
|
||||
|
||||
if environment not in ["live", "production"]:
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
UPDATE
|
||||
organisation
|
||||
SET
|
||||
organisation_type = 'nhs'
|
||||
WHERE
|
||||
organisation_type = 'nhs_local'
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
UPDATE
|
||||
services
|
||||
SET
|
||||
organisation_type = 'nhs'
|
||||
WHERE
|
||||
organisation_type = 'nhs_local'
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
@@ -27,8 +27,7 @@ def upgrade():
|
||||
def downgrade():
|
||||
conn = op.get_bind()
|
||||
conn.execute(
|
||||
text(
|
||||
"""
|
||||
text("""
|
||||
INSERT INTO
|
||||
provider_details
|
||||
(id, display_name, identifier, priority, notification_type, active, version, supports_international)
|
||||
@@ -39,7 +38,6 @@ def downgrade():
|
||||
(id, display_name, identifier, priority, notification_type, active, version, supports_international)
|
||||
VALUES
|
||||
(:uuid, 'Loadtesting', 'loadtesting', 100, 'sms', true, 1, false)
|
||||
"""
|
||||
),
|
||||
"""),
|
||||
{"uuid": str(uuid.uuid4())},
|
||||
)
|
||||
|
||||
@@ -15,18 +15,15 @@ down_revision = "0313_email_access_validated_at"
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
# if user has email_auth, set email_access_validated_at on last login, else set it at user created_at date.
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
UPDATE
|
||||
users
|
||||
SET
|
||||
email_access_validated_at = created_at
|
||||
WHERE
|
||||
email_access_validated_at IS NULL
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
UPDATE
|
||||
users
|
||||
SET
|
||||
@@ -35,8 +32,7 @@ def upgrade():
|
||||
auth_type = 'email_auth'
|
||||
AND
|
||||
logged_in_at IS NOT NULL
|
||||
"""
|
||||
)
|
||||
""")
|
||||
op.alter_column("users", "email_access_validated_at", nullable=False)
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
@@ -13,8 +13,7 @@ down_revision = "0316_int_letters_permission"
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
INSERT INTO
|
||||
service_permissions (service_id, permission, created_at)
|
||||
SELECT
|
||||
@@ -30,8 +29,7 @@ def upgrade():
|
||||
service_id = services.id and
|
||||
permission = 'upload_letters'
|
||||
)
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
def downgrade():
|
||||
|
||||
@@ -33,8 +33,7 @@ def upgrade():
|
||||
def downgrade():
|
||||
# The downgrade command must not be run in production - it will lock the tables for a long time
|
||||
if environment not in ["live", "production"]:
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
ALTER TABLE notifications ADD CONSTRAINT "chk_notifications_postage_null"
|
||||
CHECK (
|
||||
CASE WHEN notification_type = 'letter' THEN
|
||||
@@ -43,10 +42,8 @@ def downgrade():
|
||||
postage is null
|
||||
END
|
||||
)
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
ALTER TABLE notification_history ADD CONSTRAINT "chk_notification_history_postage_null"
|
||||
CHECK (
|
||||
CASE WHEN notification_type = 'letter' THEN
|
||||
@@ -55,10 +52,8 @@ def downgrade():
|
||||
postage is null
|
||||
END
|
||||
)
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
ALTER TABLE templates ADD CONSTRAINT "chk_templates_postage"
|
||||
CHECK (
|
||||
CASE WHEN template_type = 'letter' THEN
|
||||
@@ -67,10 +62,8 @@ def downgrade():
|
||||
postage is null
|
||||
END
|
||||
)
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
ALTER TABLE templates_history ADD CONSTRAINT "chk_templates_history_postage"
|
||||
CHECK (
|
||||
CASE WHEN template_type = 'letter' THEN
|
||||
@@ -79,5 +72,4 @@ def downgrade():
|
||||
postage is null
|
||||
END
|
||||
)
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
@@ -43,24 +43,18 @@ def upgrade():
|
||||
|
||||
def downgrade():
|
||||
if environment not in ["live", "production"]:
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
CREATE INDEX IF NOT EXISTS ix_notifications_service_id_created_at
|
||||
ON notifications(service_id, date(created_at))
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
CREATE INDEX IF NOT EXISTS ix_notification_history_created_at
|
||||
on notification_history(created_at)
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
CREATE INDEX IF NOT EXISTS ix_notification_history_service_id_created_at
|
||||
on notification_history(created_at)
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
op.execute("DROP INDEX IF EXISTS ix_notification_history_service_id_composite")
|
||||
|
||||
@@ -70,20 +64,14 @@ def downgrade():
|
||||
op.execute(
|
||||
"CREATE INDEX IF NOT EXISTS ix_notification_history_service_id on notification_history (service_id)"
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
CREATE INDEX IF NOT EXISTS ix_notification_history_template_id on notification_history (template_id)
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
CREATE INDEX IF NOT EXISTS ix_notification_history_notification_status
|
||||
on notification_history (notification_status)
|
||||
"""
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
""")
|
||||
op.execute("""
|
||||
CREATE INDEX IF NOT EXISTS ix_notification_history_notification_type
|
||||
on notification_history (notification_type)
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
@@ -20,9 +20,7 @@ down_revision = "0335_broadcast_msg_content"
|
||||
def upgrade():
|
||||
conn = op.get_bind()
|
||||
|
||||
results = conn.execute(
|
||||
sa.text(
|
||||
"""
|
||||
results = conn.execute(sa.text("""
|
||||
UPDATE
|
||||
broadcast_message
|
||||
SET
|
||||
@@ -34,9 +32,7 @@ def upgrade():
|
||||
broadcast_message.template_id = templates_history.id and
|
||||
broadcast_message.template_version = templates_history.version
|
||||
;
|
||||
"""
|
||||
)
|
||||
)
|
||||
"""))
|
||||
|
||||
|
||||
def downgrade():
|
||||
|
||||
@@ -19,13 +19,11 @@ def upgrade():
|
||||
op.drop_constraint(
|
||||
"ck_users_mobile_or_email_auth", "users", type_=None, schema=None
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
ALTER TABLE users ADD CONSTRAINT "ck_user_has_mobile_or_other_auth"
|
||||
CHECK (auth_type in ('email_auth', 'webauthn_auth') or mobile_number is not null)
|
||||
NOT VALID
|
||||
"""
|
||||
)
|
||||
""")
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
@@ -41,13 +39,11 @@ def downgrade():
|
||||
op.drop_constraint(
|
||||
"ck_user_has_mobile_or_other_auth", "users", type_=None, schema=None
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
ALTER TABLE users ADD CONSTRAINT "ck_users_mobile_or_email_auth"
|
||||
CHECK (auth_type = 'email_auth' or mobile_number is not null)
|
||||
NOT VALID
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
op.execute("DELETE FROM auth_type WHERE name = 'webauthn_auth'")
|
||||
# ### end Alembic commands ###
|
||||
|
||||
@@ -15,8 +15,7 @@ down_revision = "0364_drop_old_column"
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
CREATE VIEW notifications_all_time_view AS
|
||||
(
|
||||
SELECT
|
||||
@@ -72,8 +71,7 @@ def upgrade():
|
||||
document_download_count
|
||||
FROM notification_history
|
||||
)
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
def downgrade():
|
||||
|
||||
@@ -34,8 +34,7 @@ def upgrade():
|
||||
|
||||
# we need to replace the entire notifications_all_time_view in order to update it
|
||||
op.execute("DROP VIEW notifications_all_time_view;")
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
CREATE VIEW notifications_all_time_view AS
|
||||
(
|
||||
SELECT
|
||||
@@ -89,8 +88,7 @@ def upgrade():
|
||||
document_download_count
|
||||
FROM notification_history
|
||||
)
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
op.drop_column("notification_history", "postage")
|
||||
op.drop_column("notifications", "postage")
|
||||
@@ -141,8 +139,7 @@ def downgrade():
|
||||
)
|
||||
|
||||
op.execute("DROP VIEW notifications_all_time_view;")
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
CREATE VIEW notifications_all_time_view AS
|
||||
(
|
||||
SELECT
|
||||
@@ -198,6 +195,5 @@ def downgrade():
|
||||
document_download_count
|
||||
FROM notification_history
|
||||
)
|
||||
"""
|
||||
)
|
||||
""")
|
||||
# ### end Alembic commands ###
|
||||
|
||||
@@ -22,8 +22,7 @@ def upgrade():
|
||||
|
||||
def downgrade():
|
||||
# this is the inverse of migration 0317
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
INSERT INTO
|
||||
service_permissions (service_id, permission, created_at)
|
||||
SELECT
|
||||
@@ -39,8 +38,7 @@ def downgrade():
|
||||
service_id = services.id and
|
||||
permission = 'upload_letters'
|
||||
)
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
# ### end Alembic commands ###
|
||||
|
||||
@@ -151,8 +151,7 @@ def view_handler() -> Iterator[None]:
|
||||
|
||||
yield
|
||||
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
CREATE VIEW notifications_all_time_view AS
|
||||
(
|
||||
SELECT
|
||||
@@ -206,8 +205,7 @@ def view_handler() -> Iterator[None]:
|
||||
document_download_count
|
||||
FROM notification_history
|
||||
)
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
def upgrade():
|
||||
@@ -470,8 +468,7 @@ def upgrade():
|
||||
postgresql_using=enum_using("notification_type", NotificationType),
|
||||
)
|
||||
# Clobbering bad data here. These are values we don't use any more, and anything with them is unnecessary.
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
delete from
|
||||
service_permissions
|
||||
where
|
||||
@@ -482,8 +479,7 @@ def upgrade():
|
||||
'international_letters',
|
||||
'broadcast'
|
||||
);
|
||||
"""
|
||||
)
|
||||
""")
|
||||
op.alter_column(
|
||||
"service_permissions",
|
||||
"permission",
|
||||
|
||||
@@ -63,8 +63,7 @@ def view_handler() -> Iterator[None]:
|
||||
|
||||
yield
|
||||
|
||||
op.execute(
|
||||
"""
|
||||
op.execute("""
|
||||
CREATE VIEW notifications_all_time_view AS
|
||||
(
|
||||
SELECT
|
||||
@@ -118,8 +117,7 @@ def view_handler() -> Iterator[None]:
|
||||
document_download_count
|
||||
FROM notification_history
|
||||
)
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
def upgrade():
|
||||
|
||||
@@ -52,16 +52,14 @@ class RedisClient:
|
||||
# delete keys matching a pattern supplied as a parameter. Does so in batches of 5000 to prevent unpack from
|
||||
# exceeding lua's stack limit, and also to prevent errors if no keys match the pattern.
|
||||
# Inspired by https://gist.github.com/ddre54/0a4751676272e0da8186
|
||||
self.scripts["delete-keys-by-pattern"] = self.redis_store.register_script(
|
||||
"""
|
||||
self.scripts["delete-keys-by-pattern"] = self.redis_store.register_script("""
|
||||
local keys = redis.call('keys', ARGV[1])
|
||||
local deleted = 0
|
||||
for i=1, #keys, 5000 do
|
||||
deleted = deleted + redis.call('del', unpack(keys, i, math.min(i + 4999, #keys)))
|
||||
end
|
||||
return deleted
|
||||
"""
|
||||
)
|
||||
""")
|
||||
|
||||
def delete_by_pattern(self, pattern, raise_exception=False):
|
||||
r"""
|
||||
|
||||
366
poetry.lock
generated
366
poetry.lock
generated
@@ -1,4 +1,4 @@
|
||||
# This file is automatically @generated by Poetry 2.1.3 and should not be changed by hand.
|
||||
# This file is automatically @generated by Poetry 2.2.1 and should not be changed by hand.
|
||||
|
||||
[[package]]
|
||||
name = "aiohappyeyeballs"
|
||||
@@ -171,19 +171,19 @@ frozenlist = ">=1.1.0"
|
||||
|
||||
[[package]]
|
||||
name = "alembic"
|
||||
version = "1.18.1"
|
||||
version = "1.18.3"
|
||||
description = "A database migration tool for SQLAlchemy."
|
||||
optional = false
|
||||
python-versions = ">=3.10"
|
||||
groups = ["main"]
|
||||
files = [
|
||||
{file = "alembic-1.18.1-py3-none-any.whl", hash = "sha256:f1c3b0920b87134e851c25f1f7f236d8a332c34b75416802d06971df5d1b7810"},
|
||||
{file = "alembic-1.18.1.tar.gz", hash = "sha256:83ac6b81359596816fb3b893099841a0862f2117b2963258e965d70dc62fb866"},
|
||||
{file = "alembic-1.18.3-py3-none-any.whl", hash = "sha256:12a0359bfc068a4ecbb9b3b02cf77856033abfdb59e4a5aca08b7eacd7b74ddd"},
|
||||
{file = "alembic-1.18.3.tar.gz", hash = "sha256:1212aa3778626f2b0f0aa6dd4e99a5f99b94bd25a0c1ac0bba3be65e081e50b0"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
Mako = "*"
|
||||
SQLAlchemy = ">=1.4.0"
|
||||
SQLAlchemy = ">=1.4.23"
|
||||
typing-extensions = ">=4.12"
|
||||
|
||||
[package.extras]
|
||||
@@ -607,14 +607,14 @@ redis = ["redis (>=2.10.5)"]
|
||||
|
||||
[[package]]
|
||||
name = "cachetools"
|
||||
version = "6.2.4"
|
||||
version = "7.0.0"
|
||||
description = "Extensible memoizing collections and decorators"
|
||||
optional = false
|
||||
python-versions = ">=3.9"
|
||||
python-versions = ">=3.10"
|
||||
groups = ["main"]
|
||||
files = [
|
||||
{file = "cachetools-6.2.4-py3-none-any.whl", hash = "sha256:69a7a52634fed8b8bf6e24a050fb60bff1c9bd8f6d24572b99c32d4e71e62a51"},
|
||||
{file = "cachetools-6.2.4.tar.gz", hash = "sha256:82c5c05585e70b6ba2d3ae09ea60b79548872185d2f24ae1f2709d37299fd607"},
|
||||
{file = "cachetools-7.0.0-py3-none-any.whl", hash = "sha256:d52fef60e6e964a1969cfb61ccf6242a801b432790fe520d78720d757c81cbd2"},
|
||||
{file = "cachetools-7.0.0.tar.gz", hash = "sha256:a9abf18ff3b86c7d05b27ead412e235e16ae045925e531fae38d5fada5ed5b08"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1157,66 +1157,61 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "cryptography"
|
||||
version = "46.0.3"
|
||||
version = "46.0.4"
|
||||
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
|
||||
optional = false
|
||||
python-versions = "!=3.9.0,!=3.9.1,>=3.8"
|
||||
groups = ["main", "dev"]
|
||||
files = [
|
||||
{file = "cryptography-46.0.3-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a"},
|
||||
{file = "cryptography-46.0.3-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc"},
|
||||
{file = "cryptography-46.0.3-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d"},
|
||||
{file = "cryptography-46.0.3-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb"},
|
||||
{file = "cryptography-46.0.3-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849"},
|
||||
{file = "cryptography-46.0.3-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8"},
|
||||
{file = "cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec"},
|
||||
{file = "cryptography-46.0.3-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91"},
|
||||
{file = "cryptography-46.0.3-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e"},
|
||||
{file = "cryptography-46.0.3-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926"},
|
||||
{file = "cryptography-46.0.3-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71"},
|
||||
{file = "cryptography-46.0.3-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac"},
|
||||
{file = "cryptography-46.0.3-cp311-abi3-win32.whl", hash = "sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018"},
|
||||
{file = "cryptography-46.0.3-cp311-abi3-win_amd64.whl", hash = "sha256:a9a3008438615669153eb86b26b61e09993921ebdd75385ddd748702c5adfddb"},
|
||||
{file = "cryptography-46.0.3-cp311-abi3-win_arm64.whl", hash = "sha256:5d7f93296ee28f68447397bf5198428c9aeeab45705a55d53a6343455dcb2c3c"},
|
||||
{file = "cryptography-46.0.3-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:00a5e7e87938e5ff9ff5447ab086a5706a957137e6e433841e9d24f38a065217"},
|
||||
{file = "cryptography-46.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c8daeb2d2174beb4575b77482320303f3d39b8e81153da4f0fb08eb5fe86a6c5"},
|
||||
{file = "cryptography-46.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:39b6755623145ad5eff1dab323f4eae2a32a77a7abef2c5089a04a3d04366715"},
|
||||
{file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:db391fa7c66df6762ee3f00c95a89e6d428f4d60e7abc8328f4fe155b5ac6e54"},
|
||||
{file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:78a97cf6a8839a48c49271cdcbd5cf37ca2c1d6b7fdd86cc864f302b5e9bf459"},
|
||||
{file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:dfb781ff7eaa91a6f7fd41776ec37c5853c795d3b358d4896fdbb5df168af422"},
|
||||
{file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:6f61efb26e76c45c4a227835ddeae96d83624fb0d29eb5df5b96e14ed1a0afb7"},
|
||||
{file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:23b1a8f26e43f47ceb6d6a43115f33a5a37d57df4ea0ca295b780ae8546e8044"},
|
||||
{file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:b419ae593c86b87014b9be7396b385491ad7f320bde96826d0dd174459e54665"},
|
||||
{file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:50fc3343ac490c6b08c0cf0d704e881d0d660be923fd3076db3e932007e726e3"},
|
||||
{file = "cryptography-46.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:22d7e97932f511d6b0b04f2bfd818d73dcd5928db509460aaf48384778eb6d20"},
|
||||
{file = "cryptography-46.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d55f3dffadd674514ad19451161118fd010988540cee43d8bc20675e775925de"},
|
||||
{file = "cryptography-46.0.3-cp314-cp314t-win32.whl", hash = "sha256:8a6e050cb6164d3f830453754094c086ff2d0b2f3a897a1d9820f6139a1f0914"},
|
||||
{file = "cryptography-46.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:760f83faa07f8b64e9c33fc963d790a2edb24efb479e3520c14a45741cd9b2db"},
|
||||
{file = "cryptography-46.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:516ea134e703e9fe26bcd1277a4b59ad30586ea90c365a87781d7887a646fe21"},
|
||||
{file = "cryptography-46.0.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:cb3d760a6117f621261d662bccc8ef5bc32ca673e037c83fbe565324f5c46936"},
|
||||
{file = "cryptography-46.0.3-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683"},
|
||||
{file = "cryptography-46.0.3-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d"},
|
||||
{file = "cryptography-46.0.3-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0"},
|
||||
{file = "cryptography-46.0.3-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc"},
|
||||
{file = "cryptography-46.0.3-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3"},
|
||||
{file = "cryptography-46.0.3-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971"},
|
||||
{file = "cryptography-46.0.3-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac"},
|
||||
{file = "cryptography-46.0.3-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04"},
|
||||
{file = "cryptography-46.0.3-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506"},
|
||||
{file = "cryptography-46.0.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963"},
|
||||
{file = "cryptography-46.0.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4"},
|
||||
{file = "cryptography-46.0.3-cp38-abi3-win32.whl", hash = "sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df"},
|
||||
{file = "cryptography-46.0.3-cp38-abi3-win_amd64.whl", hash = "sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f"},
|
||||
{file = "cryptography-46.0.3-cp38-abi3-win_arm64.whl", hash = "sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372"},
|
||||
{file = "cryptography-46.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a23582810fedb8c0bc47524558fb6c56aac3fc252cb306072fd2815da2a47c32"},
|
||||
{file = "cryptography-46.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e7aec276d68421f9574040c26e2a7c3771060bc0cff408bae1dcb19d3ab1e63c"},
|
||||
{file = "cryptography-46.0.3-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7ce938a99998ed3c8aa7e7272dca1a610401ede816d36d0693907d863b10d9ea"},
|
||||
{file = "cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:191bb60a7be5e6f54e30ba16fdfae78ad3a342a0599eb4193ba88e3f3d6e185b"},
|
||||
{file = "cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c70cc23f12726be8f8bc72e41d5065d77e4515efae3690326764ea1b07845cfb"},
|
||||
{file = "cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:9394673a9f4de09e28b5356e7fff97d778f8abad85c9d5ac4a4b7e25a0de7717"},
|
||||
{file = "cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:94cd0549accc38d1494e1f8de71eca837d0509d0d44bf11d158524b0e12cebf9"},
|
||||
{file = "cryptography-46.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c"},
|
||||
{file = "cryptography-46.0.3.tar.gz", hash = "sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1"},
|
||||
{file = "cryptography-46.0.4-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:281526e865ed4166009e235afadf3a4c4cba6056f99336a99efba65336fd5485"},
|
||||
{file = "cryptography-46.0.4-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5f14fba5bf6f4390d7ff8f086c566454bff0411f6d8aa7af79c88b6f9267aecc"},
|
||||
{file = "cryptography-46.0.4-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:47bcd19517e6389132f76e2d5303ded6cf3f78903da2158a671be8de024f4cd0"},
|
||||
{file = "cryptography-46.0.4-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:01df4f50f314fbe7009f54046e908d1754f19d0c6d3070df1e6268c5a4af09fa"},
|
||||
{file = "cryptography-46.0.4-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5aa3e463596b0087b3da0dbe2b2487e9fc261d25da85754e30e3b40637d61f81"},
|
||||
{file = "cryptography-46.0.4-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:0a9ad24359fee86f131836a9ac3bffc9329e956624a2d379b613f8f8abaf5255"},
|
||||
{file = "cryptography-46.0.4-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:dc1272e25ef673efe72f2096e92ae39dea1a1a450dd44918b15351f72c5a168e"},
|
||||
{file = "cryptography-46.0.4-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:de0f5f4ec8711ebc555f54735d4c673fc34b65c44283895f1a08c2b49d2fd99c"},
|
||||
{file = "cryptography-46.0.4-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:eeeb2e33d8dbcccc34d64651f00a98cb41b2dc69cef866771a5717e6734dfa32"},
|
||||
{file = "cryptography-46.0.4-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:3d425eacbc9aceafd2cb429e42f4e5d5633c6f873f5e567077043ef1b9bbf616"},
|
||||
{file = "cryptography-46.0.4-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:91627ebf691d1ea3976a031b61fb7bac1ccd745afa03602275dda443e11c8de0"},
|
||||
{file = "cryptography-46.0.4-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2d08bc22efd73e8854b0b7caff402d735b354862f1145d7be3b9c0f740fef6a0"},
|
||||
{file = "cryptography-46.0.4-cp311-abi3-win32.whl", hash = "sha256:82a62483daf20b8134f6e92898da70d04d0ef9a75829d732ea1018678185f4f5"},
|
||||
{file = "cryptography-46.0.4-cp311-abi3-win_amd64.whl", hash = "sha256:6225d3ebe26a55dbc8ead5ad1265c0403552a63336499564675b29eb3184c09b"},
|
||||
{file = "cryptography-46.0.4-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:485e2b65d25ec0d901bca7bcae0f53b00133bf3173916d8e421f6fddde103908"},
|
||||
{file = "cryptography-46.0.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:078e5f06bd2fa5aea5a324f2a09f914b1484f1d0c2a4d6a8a28c74e72f65f2da"},
|
||||
{file = "cryptography-46.0.4-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:dce1e4f068f03008da7fa51cc7abc6ddc5e5de3e3d1550334eaf8393982a5829"},
|
||||
{file = "cryptography-46.0.4-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:2067461c80271f422ee7bdbe79b9b4be54a5162e90345f86a23445a0cf3fd8a2"},
|
||||
{file = "cryptography-46.0.4-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:c92010b58a51196a5f41c3795190203ac52edfd5dc3ff99149b4659eba9d2085"},
|
||||
{file = "cryptography-46.0.4-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:829c2b12bbc5428ab02d6b7f7e9bbfd53e33efd6672d21341f2177470171ad8b"},
|
||||
{file = "cryptography-46.0.4-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:62217ba44bf81b30abaeda1488686a04a702a261e26f87db51ff61d9d3510abd"},
|
||||
{file = "cryptography-46.0.4-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:9c2da296c8d3415b93e6053f5a728649a87a48ce084a9aaf51d6e46c87c7f2d2"},
|
||||
{file = "cryptography-46.0.4-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:9b34d8ba84454641a6bf4d6762d15847ecbd85c1316c0a7984e6e4e9f748ec2e"},
|
||||
{file = "cryptography-46.0.4-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:df4a817fa7138dd0c96c8c8c20f04b8aaa1fac3bbf610913dcad8ea82e1bfd3f"},
|
||||
{file = "cryptography-46.0.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b1de0ebf7587f28f9190b9cb526e901bf448c9e6a99655d2b07fff60e8212a82"},
|
||||
{file = "cryptography-46.0.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9b4d17bc7bd7cdd98e3af40b441feaea4c68225e2eb2341026c84511ad246c0c"},
|
||||
{file = "cryptography-46.0.4-cp314-cp314t-win32.whl", hash = "sha256:c411f16275b0dea722d76544a61d6421e2cc829ad76eec79280dbdc9ddf50061"},
|
||||
{file = "cryptography-46.0.4-cp314-cp314t-win_amd64.whl", hash = "sha256:728fedc529efc1439eb6107b677f7f7558adab4553ef8669f0d02d42d7b959a7"},
|
||||
{file = "cryptography-46.0.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:a9556ba711f7c23f77b151d5798f3ac44a13455cc68db7697a1096e6d0563cab"},
|
||||
{file = "cryptography-46.0.4-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8bf75b0259e87fa70bddc0b8b4078b76e7fd512fd9afae6c1193bcf440a4dbef"},
|
||||
{file = "cryptography-46.0.4-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3c268a3490df22270955966ba236d6bc4a8f9b6e4ffddb78aac535f1a5ea471d"},
|
||||
{file = "cryptography-46.0.4-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:812815182f6a0c1d49a37893a303b44eaac827d7f0d582cecfc81b6427f22973"},
|
||||
{file = "cryptography-46.0.4-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:a90e43e3ef65e6dcf969dfe3bb40cbf5aef0d523dff95bfa24256be172a845f4"},
|
||||
{file = "cryptography-46.0.4-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a05177ff6296644ef2876fce50518dffb5bcdf903c85250974fc8bc85d54c0af"},
|
||||
{file = "cryptography-46.0.4-cp38-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:daa392191f626d50f1b136c9b4cf08af69ca8279d110ea24f5c2700054d2e263"},
|
||||
{file = "cryptography-46.0.4-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:e07ea39c5b048e085f15923511d8121e4a9dc45cee4e3b970ca4f0d338f23095"},
|
||||
{file = "cryptography-46.0.4-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:d5a45ddc256f492ce42a4e35879c5e5528c09cd9ad12420828c972951d8e016b"},
|
||||
{file = "cryptography-46.0.4-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:6bb5157bf6a350e5b28aee23beb2d84ae6f5be390b2f8ee7ea179cda077e1019"},
|
||||
{file = "cryptography-46.0.4-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:dd5aba870a2c40f87a3af043e0dee7d9eb02d4aff88a797b48f2b43eff8c3ab4"},
|
||||
{file = "cryptography-46.0.4-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:93d8291da8d71024379ab2cb0b5c57915300155ad42e07f76bea6ad838d7e59b"},
|
||||
{file = "cryptography-46.0.4-cp38-abi3-win32.whl", hash = "sha256:0563655cb3c6d05fb2afe693340bc050c30f9f34e15763361cf08e94749401fc"},
|
||||
{file = "cryptography-46.0.4-cp38-abi3-win_amd64.whl", hash = "sha256:fa0900b9ef9c49728887d1576fd8d9e7e3ea872fa9b25ef9b64888adc434e976"},
|
||||
{file = "cryptography-46.0.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:766330cce7416c92b5e90c3bb71b1b79521760cdcfc3a6a1a182d4c9fab23d2b"},
|
||||
{file = "cryptography-46.0.4-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c236a44acfb610e70f6b3e1c3ca20ff24459659231ef2f8c48e879e2d32b73da"},
|
||||
{file = "cryptography-46.0.4-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8a15fb869670efa8f83cbffbc8753c1abf236883225aed74cd179b720ac9ec80"},
|
||||
{file = "cryptography-46.0.4-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:fdc3daab53b212472f1524d070735b2f0c214239df131903bae1d598016fa822"},
|
||||
{file = "cryptography-46.0.4-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:44cc0675b27cadb71bdbb96099cca1fa051cd11d2ade09e5cd3a2edb929ed947"},
|
||||
{file = "cryptography-46.0.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:be8c01a7d5a55f9a47d1888162b76c8f49d62b234d88f0ff91a9fbebe32ffbc3"},
|
||||
{file = "cryptography-46.0.4.tar.gz", hash = "sha256:bfd019f60f8abc2ed1b9be4ddc21cfef059c841d86d710bb69909a688cbb8f59"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@@ -1229,7 +1224,7 @@ nox = ["nox[uv] (>=2024.4.15)"]
|
||||
pep8test = ["check-sdist", "click (>=8.0.1)", "mypy (>=1.14)", "ruff (>=0.11.11)"]
|
||||
sdist = ["build (>=1.0.0)"]
|
||||
ssh = ["bcrypt (>=3.1.5)"]
|
||||
test = ["certifi (>=2024)", "cryptography-vectors (==46.0.3)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"]
|
||||
test = ["certifi (>=2024)", "cryptography-vectors (==46.0.4)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"]
|
||||
test-randomorder = ["pytest-randomly"]
|
||||
|
||||
[[package]]
|
||||
@@ -1930,14 +1925,14 @@ test = ["objgraph", "psutil", "setuptools"]
|
||||
|
||||
[[package]]
|
||||
name = "gunicorn"
|
||||
version = "24.1.1"
|
||||
version = "25.0.1"
|
||||
description = "WSGI HTTP Server for UNIX"
|
||||
optional = false
|
||||
python-versions = ">=3.10"
|
||||
groups = ["main"]
|
||||
files = [
|
||||
{file = "gunicorn-24.1.1-py3-none-any.whl", hash = "sha256:757f6b621fc4f7581a90600b2cd9df593461f06a41d7259cb9b94499dc4095a8"},
|
||||
{file = "gunicorn-24.1.1.tar.gz", hash = "sha256:f006d110e5cb3102859b4f5cd48335dbd9cc28d0d27cd24ddbdafa6c60929408"},
|
||||
{file = "gunicorn-25.0.1-py3-none-any.whl", hash = "sha256:23cbe968c6ae3c8efc3d118c8353fa0763efc2102d89d0d3cea696cede7ff6b1"},
|
||||
{file = "gunicorn-25.0.1.tar.gz", hash = "sha256:573e053aa950246e307ea908bd7ddce1870d41a40aec0c935938c586f0b9b946"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@@ -1947,8 +1942,9 @@ packaging = "*"
|
||||
[package.extras]
|
||||
eventlet = ["eventlet (>=0.40.3)"]
|
||||
gevent = ["gevent (>=24.10.1)"]
|
||||
http2 = ["h2 (>=4.1.0)"]
|
||||
setproctitle = ["setproctitle"]
|
||||
testing = ["coverage", "eventlet (>=0.40.3)", "gevent (>=24.10.1)", "pytest", "pytest-asyncio", "pytest-cov"]
|
||||
testing = ["coverage", "eventlet (>=0.40.3)", "gevent (>=24.10.1)", "h2 (>=4.1.0)", "httpx[http2]", "pytest", "pytest-asyncio", "pytest-cov", "uvloop (>=0.19.0)"]
|
||||
tornado = ["tornado (>=6.5.0)"]
|
||||
|
||||
[[package]]
|
||||
@@ -2031,14 +2027,14 @@ zstd = ["zstandard (>=0.18.0)"]
|
||||
|
||||
[[package]]
|
||||
name = "hypothesis"
|
||||
version = "6.151.2"
|
||||
version = "6.151.4"
|
||||
description = "The property-based testing library for Python"
|
||||
optional = false
|
||||
python-versions = ">=3.10"
|
||||
groups = ["dev"]
|
||||
files = [
|
||||
{file = "hypothesis-6.151.2-py3-none-any.whl", hash = "sha256:909d2b5f0dc80640561bb2c3859f3c56a52ed8d1cc589e5e6450362ced8c31a0"},
|
||||
{file = "hypothesis-6.151.2.tar.gz", hash = "sha256:fc91f88a77074b31c7ab871eebab3d2e0210fd3095f1d1ecbd9440c1c6bc06d9"},
|
||||
{file = "hypothesis-6.151.4-py3-none-any.whl", hash = "sha256:a1cf7e0fdaa296d697a68ff3c0b3912c0050f07aa37e7d2ff33a966749d1d9b4"},
|
||||
{file = "hypothesis-6.151.4.tar.gz", hash = "sha256:658a62da1c3ccb36746ac2f7dc4bb1a6e76bd314e0dc54c4e1aaba2503d5545c"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@@ -3150,41 +3146,41 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "newrelic"
|
||||
version = "11.3.0"
|
||||
version = "11.4.0"
|
||||
description = "New Relic Python Agent"
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
groups = ["main"]
|
||||
files = [
|
||||
{file = "newrelic-11.3.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d954383c2be2557540bfa1eba9b3759ecef990f1ba3f1e82331cc76007444613"},
|
||||
{file = "newrelic-11.3.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7220bbdf333f3c47550aa1de03f3604ef0dd215c2e16a2f48f93337253fd1fa8"},
|
||||
{file = "newrelic-11.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4fc43b3d6cad330bb4399147c4d6929a3380d98bbb78476a32454aa5a4ed2dba"},
|
||||
{file = "newrelic-11.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5814a15fc56f8c7b9f5494174ed2a0b5daace89c1e144be0f9ecba064e6bc7ab"},
|
||||
{file = "newrelic-11.3.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1059f9288fc22f979784002b27f3f60048c6e1c4ddc282ebf5df1a2aceeac42a"},
|
||||
{file = "newrelic-11.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d79e084f4f640d882558ade2a4c94a8bd44378c5dfee1448e7f4b43dec89627a"},
|
||||
{file = "newrelic-11.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:94e9eea55401037cbf71b0b3ce599aaa921e9df0c98c3b9a147fbf0d5581075a"},
|
||||
{file = "newrelic-11.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:97222e18a6641054020c7a29a16ef60d090f95cae1eeba37a0f43080aaef3830"},
|
||||
{file = "newrelic-11.3.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f2776d51f964e9a161b5ed04ea2692bb10635acce9a8aa2a84e43859cf183cac"},
|
||||
{file = "newrelic-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c63f948a8c81b1231656473db4d0a1e5d0dc51cdefb410bd97b3ae618181918"},
|
||||
{file = "newrelic-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:206b9e1952732577747fbe0090dbae75a136827a3451116cf4f6e83d9752775c"},
|
||||
{file = "newrelic-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e4f305c9c7cdc9031302de932b4d35d303554681f0a6039f7f2efd366c44546d"},
|
||||
{file = "newrelic-11.3.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6a422db7e0fb7525268d84180ddc980d8f9d796defd4cb150c6c2d87c73a9327"},
|
||||
{file = "newrelic-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f9b532a02ea15bb24092aa0d9bfb05e18163924d689e236c829837800a80539d"},
|
||||
{file = "newrelic-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c8e95433a6a52abc7d51f924c5c03337deb88668f34a1da28e882e42f74f9320"},
|
||||
{file = "newrelic-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:436f2d5aae5521cb3c4871fb4afea82ac122fa387e883e3d891f6b15b5976bb6"},
|
||||
{file = "newrelic-11.3.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4c9f0bd6fcc4c6559ec9950d8b224422249b00a01770c923c79ab0445c460cbf"},
|
||||
{file = "newrelic-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:12cb57f53ad47b1bbe599dae1276ba18be51af1482983246c999cfcbf031fe98"},
|
||||
{file = "newrelic-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ceb2d4284d79b686ecb4c644f58ca415a1d816fc58a042325959f6edda34a00c"},
|
||||
{file = "newrelic-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e20689b52730e2b18d5579ec270e1e3df9e0a0b00825f47ac6143ef47270ba60"},
|
||||
{file = "newrelic-11.3.0-cp38-cp38-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fbf298b34ef6a9bcbb4c59f33ad5206c2b6b1ea1832a1a08aa5a5260dea96a7c"},
|
||||
{file = "newrelic-11.3.0-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6eb4759bebea1e2b79b86a89081ba8910106cd728a1c540a04fd84083106b863"},
|
||||
{file = "newrelic-11.3.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2bf35dae7c72754c72ceea06bff1aec2c1cae29dc452f6edc235e5d0f3927736"},
|
||||
{file = "newrelic-11.3.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:87e386134c2af4547c7f27f665bc549550ddaf0a81dd99076320224056239af8"},
|
||||
{file = "newrelic-11.3.0-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fc6e026a3790b24d37830b4ee645d05fd0de8153f29d6e93eec0315ec555e328"},
|
||||
{file = "newrelic-11.3.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6f8a975de7803285cdd3528f6d370dd29d170873da06b465fe5925c1d8c93e05"},
|
||||
{file = "newrelic-11.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:cd672a709012d5ee9823e2c816998c3c6598391e52508fbcd86c5891bce2b647"},
|
||||
{file = "newrelic-11.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0095c5fa1cc6a1b3e859c3a33c049d1c3996e55d65af904bde47d4780e1253e7"},
|
||||
{file = "newrelic-11.3.0.tar.gz", hash = "sha256:9338c402b7888db3f70ee20ed697f586a38342b94a8e43cf9ff6d8e18e1fb4eb"},
|
||||
{file = "newrelic-11.4.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:38fd4aec8b3f8efaf876c3d8039462fb6e2b0bf0849de28bd934208e6d096be2"},
|
||||
{file = "newrelic-11.4.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f9b2794aee54fe0322ff7c11d444448128aa9669fbd2c0f5f1467027cac6b7e7"},
|
||||
{file = "newrelic-11.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d468716946cbb6f4565aea9d5807ef1886cede33ad9b820301d81e78b5fcbbd0"},
|
||||
{file = "newrelic-11.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:af6414626cf7590095e55c1d641fa6596d54ff9005daf8dbcf36e37a94ae5ef2"},
|
||||
{file = "newrelic-11.4.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6f6e357ceab9912bf2abb17a2c453ea0e23405af493051b9708f09a1445b0a19"},
|
||||
{file = "newrelic-11.4.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:25dff244bf04848ee5fbb558558af72e860f5190bcbea07bd4d2c3986e4db817"},
|
||||
{file = "newrelic-11.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:998eb96e6258d8ac61d478347faff1006f92e718b270363af50cd61875b570ee"},
|
||||
{file = "newrelic-11.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:798db1f71db0e1b29b0f76d80214e905a82b69d1e487dc48cc5b9d6b369e0b20"},
|
||||
{file = "newrelic-11.4.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c13be6683ba3f8a2ac443b6b5ab5f9f69a6b338970a8f4bcf6945013557f4c75"},
|
||||
{file = "newrelic-11.4.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0bd281089ff11ab6206ac66bcf37adb07ac3af6f665d445ed96fbc26d33e17e6"},
|
||||
{file = "newrelic-11.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:faf02ad7c842331480efcb5ad853b74c5be9e729722f97da5cf3c13693fcf657"},
|
||||
{file = "newrelic-11.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5ddd5d0f1aabc0ea13b5c90d7dce7c07508dfd5fec7ab86a833fb4d59e864063"},
|
||||
{file = "newrelic-11.4.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f558773b7d737b56bae54e9d4b38dcedb5819e7ce793e15f8d9e7a96a82adc88"},
|
||||
{file = "newrelic-11.4.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2959c5ca71e393a92af398ca8c3f9d065b3bc1b1a554670b034684139fc69e43"},
|
||||
{file = "newrelic-11.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:95b11290172bea7e247ceed76cd925323dfb4780083028bdb7dbe4bd4ad4617c"},
|
||||
{file = "newrelic-11.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:da6d88c8ca5dfa8e64a622f7d8f56fe789edaf6938fed8223c43135a584d65ce"},
|
||||
{file = "newrelic-11.4.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b8834565da39dd4c1881b4859aaf9fa70d3ed8d6cde0fc472e32ca39c95b2714"},
|
||||
{file = "newrelic-11.4.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6daf64e5c7bf2a61f74f95a7d12f57fcfb5cd8f8875a0a8a027a3f380545fc84"},
|
||||
{file = "newrelic-11.4.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:af5bb695f163de083f032779625d45815637426c59d828a4a140a07b8d783c7a"},
|
||||
{file = "newrelic-11.4.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:54bcb2a0c780eb719d9c865698dc1ca613a30dd31622b6087bc17a07c02f6319"},
|
||||
{file = "newrelic-11.4.0-cp38-cp38-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fce4d68ba01d992dee3adcd1a81afb12bb343a1356003c8daa905d35edb40c6f"},
|
||||
{file = "newrelic-11.4.0-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3f4dcb37480d30e573dd8d2aef6e1c8f95655073fbf182d292db5dcd4e047258"},
|
||||
{file = "newrelic-11.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ed02c7a694f3f1e367db5b92eeb5f08abfa37a140158fff4a72e12f8f1e38be4"},
|
||||
{file = "newrelic-11.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c71811069c52c7571973feafaf3f192ef659ffff48d18910ba2d9c244b8a8098"},
|
||||
{file = "newrelic-11.4.0-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5e9c46bcd036418efe465068156a664f9cc2d447346d8f9f9191c8594c0811cb"},
|
||||
{file = "newrelic-11.4.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05ae408ed47e4af7f0001c005d716b825475368e39dfb62fd6392e9b17559b4f"},
|
||||
{file = "newrelic-11.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3f30d81be92fb2388c7684b4c84dd3d6574dbc8a551470373f2d3694c40be5ab"},
|
||||
{file = "newrelic-11.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:da555551df8fa95d368c761cd40f9b42dcbd1d8be356a84fa4ae7aad34b97e90"},
|
||||
{file = "newrelic-11.4.0.tar.gz", hash = "sha256:058440eabda0a5c252ac853f614d6a37bcd653ec2007435b1bffdfb6d9709b66"},
|
||||
]
|
||||
|
||||
[package.extras]
|
||||
@@ -3204,84 +3200,84 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "numpy"
|
||||
version = "2.4.1"
|
||||
version = "2.4.2"
|
||||
description = "Fundamental package for array computing in Python"
|
||||
optional = false
|
||||
python-versions = ">=3.11"
|
||||
groups = ["main"]
|
||||
files = [
|
||||
{file = "numpy-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0cce2a669e3c8ba02ee563c7835f92c153cf02edff1ae05e1823f1dde21b16a5"},
|
||||
{file = "numpy-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:899d2c18024984814ac7e83f8f49d8e8180e2fbe1b2e252f2e7f1d06bea92425"},
|
||||
{file = "numpy-2.4.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:09aa8a87e45b55a1c2c205d42e2808849ece5c484b2aab11fecabec3841cafba"},
|
||||
{file = "numpy-2.4.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:edee228f76ee2dab4579fad6f51f6a305de09d444280109e0f75df247ff21501"},
|
||||
{file = "numpy-2.4.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a92f227dbcdc9e4c3e193add1a189a9909947d4f8504c576f4a732fd0b54240a"},
|
||||
{file = "numpy-2.4.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:538bf4ec353709c765ff75ae616c34d3c3dca1a68312727e8f2676ea644f8509"},
|
||||
{file = "numpy-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ac08c63cb7779b85e9d5318e6c3518b424bc1f364ac4cb2c6136f12e5ff2dccc"},
|
||||
{file = "numpy-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4f9c360ecef085e5841c539a9a12b883dff005fbd7ce46722f5e9cef52634d82"},
|
||||
{file = "numpy-2.4.1-cp311-cp311-win32.whl", hash = "sha256:0f118ce6b972080ba0758c6087c3617b5ba243d806268623dc34216d69099ba0"},
|
||||
{file = "numpy-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:18e14c4d09d55eef39a6ab5b08406e84bc6869c1e34eef45564804f90b7e0574"},
|
||||
{file = "numpy-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:6461de5113088b399d655d45c3897fa188766415d0f568f175ab071c8873bd73"},
|
||||
{file = "numpy-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d3703409aac693fa82c0aee023a1ae06a6e9d065dba10f5e8e80f642f1e9d0a2"},
|
||||
{file = "numpy-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7211b95ca365519d3596a1d8688a95874cc94219d417504d9ecb2df99fa7bfa8"},
|
||||
{file = "numpy-2.4.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:5adf01965456a664fc727ed69cc71848f28d063217c63e1a0e200a118d5eec9a"},
|
||||
{file = "numpy-2.4.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:26f0bcd9c79a00e339565b303badc74d3ea2bd6d52191eeca5f95936cad107d0"},
|
||||
{file = "numpy-2.4.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0093e85df2960d7e4049664b26afc58b03236e967fb942354deef3208857a04c"},
|
||||
{file = "numpy-2.4.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ad270f438cbdd402c364980317fb6b117d9ec5e226fff5b4148dd9aa9fc6e02"},
|
||||
{file = "numpy-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:297c72b1b98100c2e8f873d5d35fb551fce7040ade83d67dd51d38c8d42a2162"},
|
||||
{file = "numpy-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cf6470d91d34bf669f61d515499859fa7a4c2f7c36434afb70e82df7217933f9"},
|
||||
{file = "numpy-2.4.1-cp312-cp312-win32.whl", hash = "sha256:b6bcf39112e956594b3331316d90c90c90fb961e39696bda97b89462f5f3943f"},
|
||||
{file = "numpy-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:e1a27bb1b2dee45a2a53f5ca6ff2d1a7f135287883a1689e930d44d1ff296c87"},
|
||||
{file = "numpy-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:0e6e8f9d9ecf95399982019c01223dc130542960a12edfa8edd1122dfa66a8a8"},
|
||||
{file = "numpy-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d797454e37570cfd61143b73b8debd623c3c0952959adb817dd310a483d58a1b"},
|
||||
{file = "numpy-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82c55962006156aeef1629b953fd359064aa47e4d82cfc8e67f0918f7da3344f"},
|
||||
{file = "numpy-2.4.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:71abbea030f2cfc3092a0ff9f8c8fdefdc5e0bf7d9d9c99663538bb0ecdac0b9"},
|
||||
{file = "numpy-2.4.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5b55aa56165b17aaf15520beb9cbd33c9039810e0d9643dd4379e44294c7303e"},
|
||||
{file = "numpy-2.4.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0faba4a331195bfa96f93dd9dfaa10b2c7aa8cda3a02b7fd635e588fe821bf5"},
|
||||
{file = "numpy-2.4.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3e3087f53e2b4428766b54932644d148613c5a595150533ae7f00dab2f319a8"},
|
||||
{file = "numpy-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:49e792ec351315e16da54b543db06ca8a86985ab682602d90c60ef4ff4db2a9c"},
|
||||
{file = "numpy-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79e9e06c4c2379db47f3f6fc7a8652e7498251789bf8ff5bd43bf478ef314ca2"},
|
||||
{file = "numpy-2.4.1-cp313-cp313-win32.whl", hash = "sha256:3d1a100e48cb266090a031397863ff8a30050ceefd798f686ff92c67a486753d"},
|
||||
{file = "numpy-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:92a0e65272fd60bfa0d9278e0484c2f52fe03b97aedc02b357f33fe752c52ffb"},
|
||||
{file = "numpy-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:20d4649c773f66cc2fc36f663e091f57c3b7655f936a4c681b4250855d1da8f5"},
|
||||
{file = "numpy-2.4.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f93bc6892fe7b0663e5ffa83b61aab510aacffd58c16e012bb9352d489d90cb7"},
|
||||
{file = "numpy-2.4.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:178de8f87948163d98a4c9ab5bee4ce6519ca918926ec8df195af582de28544d"},
|
||||
{file = "numpy-2.4.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:98b35775e03ab7f868908b524fc0a84d38932d8daf7b7e1c3c3a1b6c7a2c9f15"},
|
||||
{file = "numpy-2.4.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:941c2a93313d030f219f3a71fd3d91a728b82979a5e8034eb2e60d394a2b83f9"},
|
||||
{file = "numpy-2.4.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:529050522e983e00a6c1c6b67411083630de8b57f65e853d7b03d9281b8694d2"},
|
||||
{file = "numpy-2.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2302dc0224c1cbc49bb94f7064f3f923a971bfae45c33870dcbff63a2a550505"},
|
||||
{file = "numpy-2.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9171a42fcad32dcf3fa86f0a4faa5e9f8facefdb276f54b8b390d90447cff4e2"},
|
||||
{file = "numpy-2.4.1-cp313-cp313t-win32.whl", hash = "sha256:382ad67d99ef49024f11d1ce5dcb5ad8432446e4246a4b014418ba3a1175a1f4"},
|
||||
{file = "numpy-2.4.1-cp313-cp313t-win_amd64.whl", hash = "sha256:62fea415f83ad8fdb6c20840578e5fbaf5ddd65e0ec6c3c47eda0f69da172510"},
|
||||
{file = "numpy-2.4.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a7870e8c5fc11aef57d6fea4b4085e537a3a60ad2cdd14322ed531fdca68d261"},
|
||||
{file = "numpy-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3869ea1ee1a1edc16c29bbe3a2f2a4e515cc3a44d43903ad41e0cacdbaf733dc"},
|
||||
{file = "numpy-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e867df947d427cdd7a60e3e271729090b0f0df80f5f10ab7dd436f40811699c3"},
|
||||
{file = "numpy-2.4.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:e3bd2cb07841166420d2fa7146c96ce00cb3410664cbc1a6be028e456c4ee220"},
|
||||
{file = "numpy-2.4.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:f0a90aba7d521e6954670550e561a4cb925713bd944445dbe9e729b71f6cabee"},
|
||||
{file = "numpy-2.4.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d558123217a83b2d1ba316b986e9248a1ed1971ad495963d555ccd75dcb1556"},
|
||||
{file = "numpy-2.4.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2f44de05659b67d20499cbc96d49f2650769afcb398b79b324bb6e297bfe3844"},
|
||||
{file = "numpy-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:69e7419c9012c4aaf695109564e3387f1259f001b4326dfa55907b098af082d3"},
|
||||
{file = "numpy-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2ffd257026eb1b34352e749d7cc1678b5eeec3e329ad8c9965a797e08ccba205"},
|
||||
{file = "numpy-2.4.1-cp314-cp314-win32.whl", hash = "sha256:727c6c3275ddefa0dc078524a85e064c057b4f4e71ca5ca29a19163c607be745"},
|
||||
{file = "numpy-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:7d5d7999df434a038d75a748275cd6c0094b0ecdb0837342b332a82defc4dc4d"},
|
||||
{file = "numpy-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:ce9ce141a505053b3c7bce3216071f3bf5c182b8b28930f14cd24d43932cd2df"},
|
||||
{file = "numpy-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4e53170557d37ae404bf8d542ca5b7c629d6efa1117dac6a83e394142ea0a43f"},
|
||||
{file = "numpy-2.4.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:a73044b752f5d34d4232f25f18160a1cc418ea4507f5f11e299d8ac36875f8a0"},
|
||||
{file = "numpy-2.4.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:fb1461c99de4d040666ca0444057b06541e5642f800b71c56e6ea92d6a853a0c"},
|
||||
{file = "numpy-2.4.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:423797bdab2eeefbe608d7c1ec7b2b4fd3c58d51460f1ee26c7500a1d9c9ee93"},
|
||||
{file = "numpy-2.4.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:52b5f61bdb323b566b528899cc7db2ba5d1015bda7ea811a8bcf3c89c331fa42"},
|
||||
{file = "numpy-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42d7dd5fa36d16d52a84f821eb96031836fd405ee6955dd732f2023724d0aa01"},
|
||||
{file = "numpy-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e7b6b5e28bbd47b7532698e5db2fe1db693d84b58c254e4389d99a27bb9b8f6b"},
|
||||
{file = "numpy-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:5de60946f14ebe15e713a6f22850c2372fa72f4ff9a432ab44aa90edcadaa65a"},
|
||||
{file = "numpy-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:8f085da926c0d491ffff3096f91078cc97ea67e7e6b65e490bc8dcda65663be2"},
|
||||
{file = "numpy-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:6436cffb4f2bf26c974344439439c95e152c9a527013f26b3577be6c2ca64295"},
|
||||
{file = "numpy-2.4.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8ad35f20be147a204e28b6a0575fbf3540c5e5f802634d4258d55b1ff5facce1"},
|
||||
{file = "numpy-2.4.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:8097529164c0f3e32bb89412a0905d9100bf434d9692d9fc275e18dcf53c9344"},
|
||||
{file = "numpy-2.4.1-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:ea66d2b41ca4a1630aae5507ee0a71647d3124d1741980138aa8f28f44dac36e"},
|
||||
{file = "numpy-2.4.1-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:d3f8f0df9f4b8be57b3bf74a1d087fec68f927a2fab68231fdb442bf2c12e426"},
|
||||
{file = "numpy-2.4.1-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2023ef86243690c2791fd6353e5b4848eedaa88ca8a2d129f462049f6d484696"},
|
||||
{file = "numpy-2.4.1-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8361ea4220d763e54cff2fbe7d8c93526b744f7cd9ddab47afeff7e14e8503be"},
|
||||
{file = "numpy-2.4.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:4f1b68ff47680c2925f8063402a693ede215f0257f02596b1318ecdfb1d79e33"},
|
||||
{file = "numpy-2.4.1.tar.gz", hash = "sha256:a1ceafc5042451a858231588a104093474c6a5c57dcc724841f5c888d237d690"},
|
||||
{file = "numpy-2.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e7e88598032542bd49af7c4747541422884219056c268823ef6e5e89851c8825"},
|
||||
{file = "numpy-2.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7edc794af8b36ca37ef5fcb5e0d128c7e0595c7b96a2318d1badb6fcd8ee86b1"},
|
||||
{file = "numpy-2.4.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:6e9f61981ace1360e42737e2bae58b27bf28a1b27e781721047d84bd754d32e7"},
|
||||
{file = "numpy-2.4.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:cb7bbb88aa74908950d979eeaa24dbdf1a865e3c7e45ff0121d8f70387b55f73"},
|
||||
{file = "numpy-2.4.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f069069931240b3fc703f1e23df63443dbd6390614c8c44a87d96cd0ec81eb1"},
|
||||
{file = "numpy-2.4.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c02ef4401a506fb60b411467ad501e1429a3487abca4664871d9ae0b46c8ba32"},
|
||||
{file = "numpy-2.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2653de5c24910e49c2b106499803124dde62a5a1fe0eedeaecf4309a5f639390"},
|
||||
{file = "numpy-2.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1ae241bbfc6ae276f94a170b14785e561cb5e7f626b6688cf076af4110887413"},
|
||||
{file = "numpy-2.4.2-cp311-cp311-win32.whl", hash = "sha256:df1b10187212b198dd45fa943d8985a3c8cf854aed4923796e0e019e113a1bda"},
|
||||
{file = "numpy-2.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:b9c618d56a29c9cb1c4da979e9899be7578d2e0b3c24d52079c166324c9e8695"},
|
||||
{file = "numpy-2.4.2-cp311-cp311-win_arm64.whl", hash = "sha256:47c5a6ed21d9452b10227e5e8a0e1c22979811cad7dcc19d8e3e2fb8fa03f1a3"},
|
||||
{file = "numpy-2.4.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:21982668592194c609de53ba4933a7471880ccbaadcc52352694a59ecc860b3a"},
|
||||
{file = "numpy-2.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40397bda92382fcec844066efb11f13e1c9a3e2a8e8f318fb72ed8b6db9f60f1"},
|
||||
{file = "numpy-2.4.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b3a24467af63c67829bfaa61eecf18d5432d4f11992688537be59ecd6ad32f5e"},
|
||||
{file = "numpy-2.4.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:805cc8de9fd6e7a22da5aed858e0ab16be5a4db6c873dde1d7451c541553aa27"},
|
||||
{file = "numpy-2.4.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d82351358ffbcdcd7b686b90742a9b86632d6c1c051016484fa0b326a0a1548"},
|
||||
{file = "numpy-2.4.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e35d3e0144137d9fdae62912e869136164534d64a169f86438bc9561b6ad49f"},
|
||||
{file = "numpy-2.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adb6ed2ad29b9e15321d167d152ee909ec73395901b70936f029c3bc6d7f4460"},
|
||||
{file = "numpy-2.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8906e71fd8afcb76580404e2a950caef2685df3d2a57fe82a86ac8d33cc007ba"},
|
||||
{file = "numpy-2.4.2-cp312-cp312-win32.whl", hash = "sha256:ec055f6dae239a6299cace477b479cca2fc125c5675482daf1dd886933a1076f"},
|
||||
{file = "numpy-2.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:209fae046e62d0ce6435fcfe3b1a10537e858249b3d9b05829e2a05218296a85"},
|
||||
{file = "numpy-2.4.2-cp312-cp312-win_arm64.whl", hash = "sha256:fbde1b0c6e81d56f5dccd95dd4a711d9b95df1ae4009a60887e56b27e8d903fa"},
|
||||
{file = "numpy-2.4.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25f2059807faea4b077a2b6837391b5d830864b3543627f381821c646f31a63c"},
|
||||
{file = "numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bd3a7a9f5847d2fb8c2c6d1c862fa109c31a9abeca1a3c2bd5a64572955b2979"},
|
||||
{file = "numpy-2.4.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8e4549f8a3c6d13d55041925e912bfd834285ef1dd64d6bc7d542583355e2e98"},
|
||||
{file = "numpy-2.4.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:aea4f66ff44dfddf8c2cffd66ba6538c5ec67d389285292fe428cb2c738c8aef"},
|
||||
{file = "numpy-2.4.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3cd545784805de05aafe1dde61752ea49a359ccba9760c1e5d1c88a93bbf2b7"},
|
||||
{file = "numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0d9b7c93578baafcbc5f0b83eaf17b79d345c6f36917ba0c67f45226911d499"},
|
||||
{file = "numpy-2.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f74f0f7779cc7ae07d1810aab8ac6b1464c3eafb9e283a40da7309d5e6e48fbb"},
|
||||
{file = "numpy-2.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c7ac672d699bf36275c035e16b65539931347d68b70667d28984c9fb34e07fa7"},
|
||||
{file = "numpy-2.4.2-cp313-cp313-win32.whl", hash = "sha256:8e9afaeb0beff068b4d9cd20d322ba0ee1cecfb0b08db145e4ab4dd44a6b5110"},
|
||||
{file = "numpy-2.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:7df2de1e4fba69a51c06c28f5a3de36731eb9639feb8e1cf7e4a7b0daf4cf622"},
|
||||
{file = "numpy-2.4.2-cp313-cp313-win_arm64.whl", hash = "sha256:0fece1d1f0a89c16b03442eae5c56dc0be0c7883b5d388e0c03f53019a4bfd71"},
|
||||
{file = "numpy-2.4.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5633c0da313330fd20c484c78cdd3f9b175b55e1a766c4a174230c6b70ad8262"},
|
||||
{file = "numpy-2.4.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d9f64d786b3b1dd742c946c42d15b07497ed14af1a1f3ce840cce27daa0ce913"},
|
||||
{file = "numpy-2.4.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:b21041e8cb6a1eb5312dd1d2f80a94d91efffb7a06b70597d44f1bd2dfc315ab"},
|
||||
{file = "numpy-2.4.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:00ab83c56211a1d7c07c25e3217ea6695e50a3e2f255053686b081dc0b091a82"},
|
||||
{file = "numpy-2.4.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fb882da679409066b4603579619341c6d6898fc83a8995199d5249f986e8e8f"},
|
||||
{file = "numpy-2.4.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:66cb9422236317f9d44b67b4d18f44efe6e9c7f8794ac0462978513359461554"},
|
||||
{file = "numpy-2.4.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0f01dcf33e73d80bd8dc0f20a71303abbafa26a19e23f6b68d1aa9990af90257"},
|
||||
{file = "numpy-2.4.2-cp313-cp313t-win32.whl", hash = "sha256:52b913ec40ff7ae845687b0b34d8d93b60cb66dcee06996dd5c99f2fc9328657"},
|
||||
{file = "numpy-2.4.2-cp313-cp313t-win_amd64.whl", hash = "sha256:5eea80d908b2c1f91486eb95b3fb6fab187e569ec9752ab7d9333d2e66bf2d6b"},
|
||||
{file = "numpy-2.4.2-cp313-cp313t-win_arm64.whl", hash = "sha256:fd49860271d52127d61197bb50b64f58454e9f578cb4b2c001a6de8b1f50b0b1"},
|
||||
{file = "numpy-2.4.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:444be170853f1f9d528428eceb55f12918e4fda5d8805480f36a002f1415e09b"},
|
||||
{file = "numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d1240d50adff70c2a88217698ca844723068533f3f5c5fa6ee2e3220e3bdb000"},
|
||||
{file = "numpy-2.4.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:7cdde6de52fb6664b00b056341265441192d1291c130e99183ec0d4b110ff8b1"},
|
||||
{file = "numpy-2.4.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:cda077c2e5b780200b6b3e09d0b42205a3d1c68f30c6dceb90401c13bff8fe74"},
|
||||
{file = "numpy-2.4.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d30291931c915b2ab5717c2974bb95ee891a1cf22ebc16a8006bd59cd210d40a"},
|
||||
{file = "numpy-2.4.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bba37bc29d4d85761deed3954a1bc62be7cf462b9510b51d367b769a8c8df325"},
|
||||
{file = "numpy-2.4.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b2f0073ed0868db1dcd86e052d37279eef185b9c8db5bf61f30f46adac63c909"},
|
||||
{file = "numpy-2.4.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7f54844851cdb630ceb623dcec4db3240d1ac13d4990532446761baede94996a"},
|
||||
{file = "numpy-2.4.2-cp314-cp314-win32.whl", hash = "sha256:12e26134a0331d8dbd9351620f037ec470b7c75929cb8a1537f6bfe411152a1a"},
|
||||
{file = "numpy-2.4.2-cp314-cp314-win_amd64.whl", hash = "sha256:068cdb2d0d644cdb45670810894f6a0600797a69c05f1ac478e8d31670b8ee75"},
|
||||
{file = "numpy-2.4.2-cp314-cp314-win_arm64.whl", hash = "sha256:6ed0be1ee58eef41231a5c943d7d1375f093142702d5723ca2eb07db9b934b05"},
|
||||
{file = "numpy-2.4.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:98f16a80e917003a12c0580f97b5f875853ebc33e2eaa4bccfc8201ac6869308"},
|
||||
{file = "numpy-2.4.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:20abd069b9cda45874498b245c8015b18ace6de8546bf50dfa8cea1696ed06ef"},
|
||||
{file = "numpy-2.4.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:e98c97502435b53741540a5717a6749ac2ada901056c7db951d33e11c885cc7d"},
|
||||
{file = "numpy-2.4.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da6cad4e82cb893db4b69105c604d805e0c3ce11501a55b5e9f9083b47d2ffe8"},
|
||||
{file = "numpy-2.4.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e4424677ce4b47fe73c8b5556d876571f7c6945d264201180db2dc34f676ab5"},
|
||||
{file = "numpy-2.4.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2b8f157c8a6f20eb657e240f8985cc135598b2b46985c5bccbde7616dc9c6b1e"},
|
||||
{file = "numpy-2.4.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5daf6f3914a733336dab21a05cdec343144600e964d2fcdabaac0c0269874b2a"},
|
||||
{file = "numpy-2.4.2-cp314-cp314t-win32.whl", hash = "sha256:8c50dd1fc8826f5b26a5ee4d77ca55d88a895f4e4819c7ecc2a9f5905047a443"},
|
||||
{file = "numpy-2.4.2-cp314-cp314t-win_amd64.whl", hash = "sha256:fcf92bee92742edd401ba41135185866f7026c502617f422eb432cfeca4fe236"},
|
||||
{file = "numpy-2.4.2-cp314-cp314t-win_arm64.whl", hash = "sha256:1f92f53998a17265194018d1cc321b2e96e900ca52d54c7c77837b71b9465181"},
|
||||
{file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:89f7268c009bc492f506abd6f5265defa7cb3f7487dc21d357c3d290add45082"},
|
||||
{file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6dee3bb76aa4009d5a912180bf5b2de012532998d094acee25d9cb8dee3e44a"},
|
||||
{file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:cd2bd2bbed13e213d6b55dc1d035a4f91748a7d3edc9480c13898b0353708920"},
|
||||
{file = "numpy-2.4.2-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:cf28c0c1d4c4bf00f509fa7eb02c58d7caf221b50b467bcb0d9bbf1584d5c821"},
|
||||
{file = "numpy-2.4.2-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e04ae107ac591763a47398bb45b568fc38f02dbc4aa44c063f67a131f99346cb"},
|
||||
{file = "numpy-2.4.2-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:602f65afdef699cda27ec0b9224ae5dc43e328f4c24c689deaf77133dbee74d0"},
|
||||
{file = "numpy-2.4.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:be71bf1edb48ebbbf7f6337b5bfd2f895d1902f6335a5830b20141fc126ffba0"},
|
||||
{file = "numpy-2.4.2.tar.gz", hash = "sha256:659a6107e31a83c4e33f763942275fd278b21d095094044eb35569e86a21ddae"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -3397,14 +3393,14 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "pip"
|
||||
version = "25.3"
|
||||
version = "26.0"
|
||||
description = "The PyPA recommended tool for installing Python packages."
|
||||
optional = false
|
||||
python-versions = ">=3.9"
|
||||
groups = ["dev"]
|
||||
files = [
|
||||
{file = "pip-25.3-py3-none-any.whl", hash = "sha256:9655943313a94722b7774661c21049070f6bbb0a1516bf02f7c8d5d9201514cd"},
|
||||
{file = "pip-25.3.tar.gz", hash = "sha256:8d0538dbbd7babbd207f261ed969c65de439f6bc9e5dbd3b3b9a77f25d95f343"},
|
||||
{file = "pip-26.0-py3-none-any.whl", hash = "sha256:98436feffb9e31bc9339cf369fd55d3331b1580b6a6f1173bacacddcf9c34754"},
|
||||
{file = "pip-26.0.tar.gz", hash = "sha256:3ce220a0a17915972fbf1ab451baae1521c4539e778b28127efa79b974aff0fa"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -3796,8 +3792,10 @@ files = [
|
||||
{file = "psycopg2_binary-2.9.11-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c47676e5b485393f069b4d7a811267d3168ce46f988fa602658b8bb901e9e64d"},
|
||||
{file = "psycopg2_binary-2.9.11-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:a28d8c01a7b27a1e3265b11250ba7557e5f72b5ee9e5f3a2fa8d2949c29bf5d2"},
|
||||
{file = "psycopg2_binary-2.9.11-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5f3f2732cf504a1aa9e9609d02f79bea1067d99edf844ab92c247bbca143303b"},
|
||||
{file = "psycopg2_binary-2.9.11-cp310-cp310-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:865f9945ed1b3950d968ec4690ce68c55019d79e4497366d36e090327ce7db14"},
|
||||
{file = "psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:91537a8df2bde69b1c1db01d6d944c831ca793952e4f57892600e96cee95f2cd"},
|
||||
{file = "psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4dca1f356a67ecb68c81a7bc7809f1569ad9e152ce7fd02c2f2036862ca9f66b"},
|
||||
{file = "psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:0da4de5c1ac69d94ed4364b6cbe7190c1a70d325f112ba783d83f8440285f152"},
|
||||
{file = "psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37d8412565a7267f7d79e29ab66876e55cb5e8e7b3bbf94f8206f6795f8f7e7e"},
|
||||
{file = "psycopg2_binary-2.9.11-cp310-cp310-win_amd64.whl", hash = "sha256:c665f01ec8ab273a61c62beeb8cce3014c214429ced8a308ca1fc410ecac3a39"},
|
||||
{file = "psycopg2_binary-2.9.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0e8480afd62362d0a6a27dd09e4ca2def6fa50ed3a4e7c09165266106b2ffa10"},
|
||||
@@ -3805,8 +3803,10 @@ files = [
|
||||
{file = "psycopg2_binary-2.9.11-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2e164359396576a3cc701ba8af4751ae68a07235d7a380c631184a611220d9a4"},
|
||||
{file = "psycopg2_binary-2.9.11-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:d57c9c387660b8893093459738b6abddbb30a7eab058b77b0d0d1c7d521ddfd7"},
|
||||
{file = "psycopg2_binary-2.9.11-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2c226ef95eb2250974bf6fa7a842082b31f68385c4f3268370e3f3870e7859ee"},
|
||||
{file = "psycopg2_binary-2.9.11-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a311f1edc9967723d3511ea7d2708e2c3592e3405677bf53d5c7246753591fbb"},
|
||||
{file = "psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ebb415404821b6d1c47353ebe9c8645967a5235e6d88f914147e7fd411419e6f"},
|
||||
{file = "psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f07c9c4a5093258a03b28fab9b4f151aa376989e7f35f855088234e656ee6a94"},
|
||||
{file = "psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:00ce1830d971f43b667abe4a56e42c1e2d594b32da4802e44a73bacacb25535f"},
|
||||
{file = "psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cffe9d7697ae7456649617e8bb8d7a45afb71cd13f7ab22af3e5c61f04840908"},
|
||||
{file = "psycopg2_binary-2.9.11-cp311-cp311-win_amd64.whl", hash = "sha256:304fd7b7f97eef30e91b8f7e720b3db75fee010b520e434ea35ed1ff22501d03"},
|
||||
{file = "psycopg2_binary-2.9.11-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:be9b840ac0525a283a96b556616f5b4820e0526addb8dcf6525a0fa162730be4"},
|
||||
@@ -3814,8 +3814,10 @@ files = [
|
||||
{file = "psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ab8905b5dcb05bf3fb22e0cf90e10f469563486ffb6a96569e51f897c750a76a"},
|
||||
{file = "psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:bf940cd7e7fec19181fdbc29d76911741153d51cab52e5c21165f3262125685e"},
|
||||
{file = "psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fa0f693d3c68ae925966f0b14b8edda71696608039f4ed61b1fe9ffa468d16db"},
|
||||
{file = "psycopg2_binary-2.9.11-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a1cf393f1cdaf6a9b57c0a719a1068ba1069f022a59b8b1fe44b006745b59757"},
|
||||
{file = "psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ef7a6beb4beaa62f88592ccc65df20328029d721db309cb3250b0aae0fa146c3"},
|
||||
{file = "psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:31b32c457a6025e74d233957cc9736742ac5a6cb196c6b68499f6bb51390bd6a"},
|
||||
{file = "psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:edcb3aeb11cb4bf13a2af3c53a15b3d612edeb6409047ea0b5d6a21a9d744b34"},
|
||||
{file = "psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:62b6d93d7c0b61a1dd6197d208ab613eb7dcfdcca0a49c42ceb082257991de9d"},
|
||||
{file = "psycopg2_binary-2.9.11-cp312-cp312-win_amd64.whl", hash = "sha256:b33fabeb1fde21180479b2d4667e994de7bbf0eec22832ba5d9b5e4cf65b6c6d"},
|
||||
{file = "psycopg2_binary-2.9.11-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b8fb3db325435d34235b044b199e56cdf9ff41223a4b9752e8576465170bb38c"},
|
||||
@@ -3823,8 +3825,10 @@ files = [
|
||||
{file = "psycopg2_binary-2.9.11-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8c55b385daa2f92cb64b12ec4536c66954ac53654c7f15a203578da4e78105c0"},
|
||||
{file = "psycopg2_binary-2.9.11-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:c0377174bf1dd416993d16edc15357f6eb17ac998244cca19bc67cdc0e2e5766"},
|
||||
{file = "psycopg2_binary-2.9.11-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5c6ff3335ce08c75afaed19e08699e8aacf95d4a260b495a4a8545244fe2ceb3"},
|
||||
{file = "psycopg2_binary-2.9.11-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:84011ba3109e06ac412f95399b704d3d6950e386b7994475b231cf61eec2fc1f"},
|
||||
{file = "psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ba34475ceb08cccbdd98f6b46916917ae6eeb92b5ae111df10b544c3a4621dc4"},
|
||||
{file = "psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b31e90fdd0f968c2de3b26ab014314fe814225b6c324f770952f7d38abf17e3c"},
|
||||
{file = "psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:d526864e0f67f74937a8fce859bd56c979f5e2ec57ca7c627f5f1071ef7fee60"},
|
||||
{file = "psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:04195548662fa544626c8ea0f06561eb6203f1984ba5b4562764fbeb4c3d14b1"},
|
||||
{file = "psycopg2_binary-2.9.11-cp313-cp313-win_amd64.whl", hash = "sha256:efff12b432179443f54e230fdf60de1f6cc726b6c832db8701227d089310e8aa"},
|
||||
{file = "psycopg2_binary-2.9.11-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:92e3b669236327083a2e33ccfa0d320dd01b9803b3e14dd986a4fc54aa00f4e1"},
|
||||
@@ -3832,8 +3836,10 @@ files = [
|
||||
{file = "psycopg2_binary-2.9.11-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9b52a3f9bb540a3e4ec0f6ba6d31339727b2950c9772850d6545b7eae0b9d7c5"},
|
||||
{file = "psycopg2_binary-2.9.11-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:db4fd476874ccfdbb630a54426964959e58da4c61c9feba73e6094d51303d7d8"},
|
||||
{file = "psycopg2_binary-2.9.11-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:47f212c1d3be608a12937cc131bd85502954398aaa1320cb4c14421a0ffccf4c"},
|
||||
{file = "psycopg2_binary-2.9.11-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e35b7abae2b0adab776add56111df1735ccc71406e56203515e228a8dc07089f"},
|
||||
{file = "psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fcf21be3ce5f5659daefd2b3b3b6e4727b028221ddc94e6c1523425579664747"},
|
||||
{file = "psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:9bd81e64e8de111237737b29d68039b9c813bdf520156af36d26819c9a979e5f"},
|
||||
{file = "psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:32770a4d666fbdafab017086655bcddab791d7cb260a16679cc5a7338b64343b"},
|
||||
{file = "psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c3cb3a676873d7506825221045bd70e0427c905b9c8ee8d6acd70cfcbd6e576d"},
|
||||
{file = "psycopg2_binary-2.9.11-cp314-cp314-win_amd64.whl", hash = "sha256:4012c9c954dfaccd28f94e84ab9f94e12df76b4afb22331b1f0d3154893a6316"},
|
||||
{file = "psycopg2_binary-2.9.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:20e7fb94e20b03dcc783f76c0865f9da39559dcc0c28dd1a3fce0d01902a6b9c"},
|
||||
@@ -3841,8 +3847,10 @@ files = [
|
||||
{file = "psycopg2_binary-2.9.11-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9d3a9edcfbe77a3ed4bc72836d466dfce4174beb79eda79ea155cc77237ed9e8"},
|
||||
{file = "psycopg2_binary-2.9.11-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:44fc5c2b8fa871ce7f0023f619f1349a0aa03a0857f2c96fbc01c657dcbbdb49"},
|
||||
{file = "psycopg2_binary-2.9.11-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9c55460033867b4622cda1b6872edf445809535144152e5d14941ef591980edf"},
|
||||
{file = "psycopg2_binary-2.9.11-cp39-cp39-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2d11098a83cca92deaeaed3d58cfd150d49b3b06ee0d0852be466bf87596899e"},
|
||||
{file = "psycopg2_binary-2.9.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:691c807d94aecfbc76a14e1408847d59ff5b5906a04a23e12a89007672b9e819"},
|
||||
{file = "psycopg2_binary-2.9.11-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:8b81627b691f29c4c30a8f322546ad039c40c328373b11dff7490a3e1b517855"},
|
||||
{file = "psycopg2_binary-2.9.11-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:b637d6d941209e8d96a072d7977238eea128046effbf37d1d8b2c0764750017d"},
|
||||
{file = "psycopg2_binary-2.9.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:41360b01c140c2a03d346cec3280cf8a71aa07d94f3b1509fa0161c366af66b4"},
|
||||
{file = "psycopg2_binary-2.9.11-cp39-cp39-win_amd64.whl", hash = "sha256:875039274f8a2361e5207857899706da840768e2a775bf8c65e82f60b197df02"},
|
||||
]
|
||||
@@ -5970,4 +5978,4 @@ cffi = ["cffi (>=1.17,<2.0) ; platform_python_implementation != \"PyPy\" and pyt
|
||||
[metadata]
|
||||
lock-version = "2.1"
|
||||
python-versions = "^3.13.2"
|
||||
content-hash = "09b5895003909b33b6f83ff4dfd81daaba2d1e159629f2d13dd0bf35b25937e0"
|
||||
content-hash = "31a6c990253c154f2d2eaa3c819b3137cc9d7c76b123bfd106b111e617921521"
|
||||
|
||||
@@ -9,12 +9,12 @@ readme = "README.md"
|
||||
|
||||
[tool.poetry.dependencies]
|
||||
python = "^3.13.2"
|
||||
alembic = "==1.18.1"
|
||||
alembic = "==1.18.3"
|
||||
amqp = "==5.3.1"
|
||||
beautifulsoup4 = "==4.14.3"
|
||||
boto3 = "^1.38.27"
|
||||
botocore = "^1.38.27"
|
||||
cachetools = "==6.2.4"
|
||||
cachetools = "==7.0.0"
|
||||
celery = {version = "==5.6.2", extras = ["redis"]}
|
||||
certifi = ">=2022.12.7"
|
||||
cffi = "==2.0.0"
|
||||
@@ -31,13 +31,13 @@ flask-bcrypt = "==1.0.1"
|
||||
flask-migrate = "==4.1.0"
|
||||
flask-redis = "==0.4.0"
|
||||
flask-sqlalchemy = "^3.1.1"
|
||||
gunicorn = {version = "==24.1.1", extras = ["gevent"]}
|
||||
gunicorn = {version = "==25.0.1", extras = ["gevent"]}
|
||||
iso8601 = "==2.1.0"
|
||||
jsonschema = {version = "==4.26.0", extras = ["format"]}
|
||||
lxml = "==6.0.2"
|
||||
marshmallow = "^4.2.1"
|
||||
marshmallow-sqlalchemy = "^1.4.2"
|
||||
newrelic = "^11.3.0"
|
||||
newrelic = "^11.4.0"
|
||||
packaging = "==26.0"
|
||||
poetry-dotenv-plugin = "==0.2.0"
|
||||
psycopg2-binary = "==2.9.11"
|
||||
@@ -49,7 +49,7 @@ faker = "^40.1.0"
|
||||
async-timeout = "^5.0.1"
|
||||
bleach = "^6.3.0"
|
||||
geojson = "^3.2.0"
|
||||
numpy = "^2.4.1"
|
||||
numpy = "^2.4.2"
|
||||
ordered-set = "^4.1.0"
|
||||
phonenumbers = "^9.0.22"
|
||||
python-json-logger = "^4.0.0"
|
||||
@@ -58,7 +58,7 @@ shapely = "^2.1.2"
|
||||
smartypants = "^2.0.1"
|
||||
mistune = "^3.2.0"
|
||||
blinker = "^1.9.0"
|
||||
cryptography = "^46.0.3"
|
||||
cryptography = "^46.0.4"
|
||||
idna = "^3.11"
|
||||
jmespath = "^1.1.0"
|
||||
markupsafe = "^3.0.3"
|
||||
@@ -94,7 +94,7 @@ exceptiongroup = "==1.3.1"
|
||||
flake8 = "^7.3.0"
|
||||
flake8-bugbear = "^25.11.29"
|
||||
freezegun = "^1.5.5"
|
||||
hypothesis = "^6.151.2"
|
||||
hypothesis = "^6.151.4"
|
||||
honcho = "*"
|
||||
isort = "^7.0.0"
|
||||
jinja2-cli = {version = "==1.0.0", extras = ["yaml"]}
|
||||
|
||||
@@ -395,20 +395,16 @@ def test_strip_and_remove_obscure_whitespace_only_removes_normal_whitespace_from
|
||||
|
||||
def test_remove_smart_quotes_from_email_addresses():
|
||||
assert (
|
||||
remove_smart_quotes_from_email_addresses(
|
||||
"""
|
||||
remove_smart_quotes_from_email_addresses("""
|
||||
line one’s quote
|
||||
first.o’last@example.com is someone’s email address
|
||||
line ‘three’
|
||||
"""
|
||||
)
|
||||
== (
|
||||
"""
|
||||
""")
|
||||
== ("""
|
||||
line one’s quote
|
||||
first.o'last@example.com is someone’s email address
|
||||
line ‘three’
|
||||
"""
|
||||
)
|
||||
""")
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -1014,9 +1014,7 @@ def test_multiple_sms_recipient_columns_with_missing_data(column_name):
|
||||
"""
|
||||
names, phone number, {}
|
||||
"Joanna and Steve", 07900 900111
|
||||
""".format(
|
||||
column_name
|
||||
),
|
||||
""".format(column_name),
|
||||
template=_sample_template("sms"),
|
||||
allow_international_sms=True,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user