Skip to content

Commit

Permalink
chore: merge release
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex Zorkin committed Feb 19, 2025
2 parents 0da8a08 + a554365 commit 8008a85
Show file tree
Hide file tree
Showing 69 changed files with 2,997 additions and 550 deletions.
614 changes: 614 additions & 0 deletions backend/lcfs/db/migrations/versions/2025-02-11-22-14_f0d95904a9dd.py

Large diffs are not rendered by default.

105 changes: 105 additions & 0 deletions backend/lcfs/db/migrations/versions/2025-02-11-23-51_44c6f23b71d3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
"""add compliance period to uci
Revision ID: 44c6f23b71d3
Revises: f0d95904a9dd
Create Date: 2025-02-11 23:51:48.841478
"""

from alembic import op
import sqlalchemy as sa
from sqlalchemy import text
from datetime import datetime

# revision identifiers, used by Alembic.
revision = "44c6f23b71d3"
down_revision = "f0d95904a9dd"
branch_labels = None
depends_on = None


def upgrade():
# Add new column (initially nullable) to store compliance period
op.add_column(
'additional_carbon_intensity',
sa.Column('compliance_period_id', sa.Integer(), nullable=True)
)

# Add foreign key constraint
op.create_foreign_key(
'fk_additional_ci_compliance_period',
'additional_carbon_intensity',
'compliance_period',
['compliance_period_id'],
['compliance_period_id']
)

connection = op.get_bind()

# Get the compliance period for 2024 when the UCI was first introduced
target_year = "2024"
result = connection.execute(
text("""
SELECT compliance_period_id
FROM compliance_period
WHERE description = :year
"""),
{"year": target_year}
)
compliance_period_id = result.scalar_one()

if not compliance_period_id:
raise Exception(f"Compliance period for year {target_year} not found")

# Update all existing UCI records with the compliance period
connection.execute(
text("""
UPDATE additional_carbon_intensity
SET compliance_period_id = :period_id
WHERE compliance_period_id IS NULL
"""),
{"period_id": compliance_period_id}
)

# Verify the update
null_count = connection.execute(
text("""
SELECT COUNT(*)
FROM additional_carbon_intensity
WHERE compliance_period_id IS NULL
""")
).scalar()

if null_count > 0:
raise Exception(
f"Migration failed: {null_count} records still have null compliance_period_id"
)

# Make column not nullable only after verification
op.alter_column(
'additional_carbon_intensity',
'compliance_period_id',
existing_type=sa.Integer(),
nullable=False
)

# Create unique constraint
op.create_unique_constraint(
'uq_additional_ci_compliance_fuel_enduse',
'additional_carbon_intensity',
['compliance_period_id', 'fuel_type_id', 'end_use_type_id']
)


def downgrade():
op.drop_constraint(
'uq_additional_ci_compliance_fuel_enduse',
'additional_carbon_intensity',
type_='unique'
)
op.drop_constraint(
'fk_additional_ci_compliance_period',
'additional_carbon_intensity',
type_='foreignkey'
)
op.drop_column('additional_carbon_intensity', 'compliance_period_id')
Loading

0 comments on commit 8008a85

Please sign in to comment.