diff options
Diffstat (limited to 'alembic/versions')
-rw-r--r-- | alembic/versions/4a3773e332a0_use_utc_datetime_in_db.py.old | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/alembic/versions/4a3773e332a0_use_utc_datetime_in_db.py.old b/alembic/versions/4a3773e332a0_use_utc_datetime_in_db.py.old new file mode 100644 index 0000000..e011a3a --- /dev/null +++ b/alembic/versions/4a3773e332a0_use_utc_datetime_in_db.py.old @@ -0,0 +1,110 @@ +"""use UTC DateTime in DB + +Revision ID: 4a3773e332a0 +Revises: +Create Date: 2022-11-15 17:35:11.717714 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '4a3773e332a0' +down_revision = None +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('borrows', sa.Column('purchase_utc', sa.DateTime(), nullable=True)) + op.add_column('borrows', sa.Column('expiration_utc', sa.DateTime(), nullable=True)) + op.add_column('borrows', sa.Column('purchase_timezone', sa.Integer(), nullable=True)) + op.add_column('borrows', sa.Column('expiration_timezone', sa.Integer(), nullable=True)) + borrows = sa.Table( + "borrows", + sa.MetaData(), + sa.Column("id", sa.Integer, primary_key=True, nullable=False), + sa.Column("purchase", sa.String, nullable=True), + sa.Column("expiration", sa.String, nullable=True), + sa.Column("purchase_utc", sa.DateTime, nullable=True), + sa.Column("expiration_utc", sa.DateTime, nullable=True), + sa.Column("purchase_timezone", sa.Integer, nullable=True), + sa.Column("expiration_timezone", sa.Integer, nullable=True) + ) + connection = op.get_bind() + results = connection.execute(sa.select([ + borrows.c.id, + borrows.c.purchase, + borrows.c.expiration, + borrows.c.purchase_utc, + borrows.c.expiration_utc, + borrows.c.purchase_timezone, + borrows.c.expiration_timezone + ])).fetchall() + from datetime import datetime, timezone + for id, purchase, expiration, purchase_utc, expiration_utc, purchase_timezone, expiration_timezone in results: + if id % 1000 == 0: + print(f"... obdelujem id {id}", end="\r") + if purchase == None: + print(f"at id {id} purchase is None") + continue + purchase_utc = datetime.strptime(purchase, "%Y-%m-%dT%H:%M:%S%z") + expiration_utc = datetime.strptime(expiration, "%Y-%m-%dT%H:%M:%S%z") + purchase_timezone = purchase_utc.tzinfo.utcoffset(None).seconds + expiration_timezone = expiration_utc.tzinfo.utcoffset(None).seconds + purchase_utc = purchase_utc.astimezone(timezone.utc).replace(tzinfo=None) + expiration_utc = expiration_utc.astimezone(timezone.utc).replace(tzinfo=None) + connection.execute(borrows.update().where(borrows.c.id == id).values( + purchase_utc = purchase_utc, + expiration_utc = expiration_utc, + purchase_timezone = purchase_timezone, + expiration_timezone = expiration_timezone + )) + op.drop_column('borrows', 'expiration') + op.drop_column('borrows', 'purchase') + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('borrows', sa.Column('purchase', sa.VARCHAR(), nullable=True)) + op.add_column('borrows', sa.Column('expiration', sa.VARCHAR(), nullable=True)) + borrows = sa.Table( + "borrows", + sa.MetaData(), + sa.Column("id", sa.Integer, primary_key=True, nullable=False), + sa.Column("purchase", sa.String, nullable=True), + sa.Column("expiration", sa.String, nullable=True), + sa.Column("purchase_utc", sa.DateTime, nullable=True), + sa.Column("expiration_utc", sa.DateTime, nullable=True), + sa.Column("purchase_timezone", sa.Integer, nullable=True), + sa.Column("expiration_timezone", sa.Integer, nullable=True) + ) + connection = op.get_bind() + results = connection.execute(sa.select([ + borrows.c.id, + borrows.c.purchase, + borrows.c.expiration, + borrows.c.purchase_utc, + borrows.c.expiration_utc, + borrows.c.purchase_timezone, + borrows.c.expiration_timezone + ])).fetchall() + from datetime import datetime, timezone, timedelta + for id, purchase, expiration, purchase_utc, expiration_utc, purchase_timezone, expiration_timezone in results: + if id % 1000 == 0: + print(f"... obdelujem id {id}", end="\r") + if purchase_utc == None: + print(f"at id {id} purchase_utc is None") + continue + connection.execute(borrows.update().where(borrows.c.id == id).values( + purchase = purchase_utc.astimezone(timezone(timedelta(seconds=purchase_timezone))).isoformat(), + expiration = expiration_utc.astimezone(timezone(timedelta(seconds=expiration_timezone))).isoformat() + )) + op.drop_column('borrows', 'expiration_timezone') + op.drop_column('borrows', 'purchase_timezone') + op.drop_column('borrows', 'expiration_utc') + op.drop_column('borrows', 'purchase_utc') + # ### end Alembic commands ### |