summaryrefslogtreecommitdiffhomepage
path: root/migrations/versions/195144da1f7e_.py
blob: f4151b9ffc133cb849e27af66832a68bd08836d0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
"""empty message

Revision ID: 195144da1f7e
Revises: 95cd4cf40d7a
Create Date: 2023-07-27 13:14:08.825037

"""
from alembic import op
import sqlalchemy as sa

from app.database import TableHistory, TableHistoryMovie, TableBlacklist, TableBlacklistMovie, select


# revision identifiers, used by Alembic.
revision = '195144da1f7e'
down_revision = '95cd4cf40d7a'
branch_labels = None
depends_on = None

bind = op.get_context().bind
insp = sa.inspect(bind)
tables = insp.get_table_names()
sqlite = bind.engine.name == 'sqlite'


def column_exists(table_name, column_name):
    columns = insp.get_columns(table_name)
    return any(c["name"] == column_name for c in columns)


def upgrade():
    if column_exists('table_episodes', 'rowid'):
        if sqlite:
            table_history_data = [{
                "id": x.id,
                "action": x.action,
                "description": x.description,
                "language": x.language,
                "provider": x.provider,
                "score": x.score,
                "sonarrEpisodeId": x.sonarrEpisodeId,
                "sonarrSeriesId": x.sonarrSeriesId,
                "subs_id": x.subs_id,
                "subtitles_path": x.subtitles_path,
                "timestamp": x.timestamp,
                "video_path": x.video_path,
                "matched": x.matched,
                "not_matched": x.not_matched,
            } for x in bind.execute(select(TableHistory)).all()]

            table_blacklist_data = [{
                "id": x.id,
                "language": x.language,
                "provider": x.provider,
                "sonarr_episode_id": x.sonarr_episode_id,
                "sonarr_series_id": x.sonarr_series_id,
                "subs_id": x.subs_id,
                "timestamp": x.timestamp,
            } for x in bind.execute(select(TableBlacklist)).all()]
        with op.batch_alter_table('table_episodes') as batch_op:
            batch_op.drop_column(column_name='rowid')
        if sqlite:
            op.bulk_insert(TableHistory.__table__, rows=table_history_data)
            op.bulk_insert(TableBlacklist.__table__, rows=table_blacklist_data)

    if column_exists('table_movies', 'rowid'):
        if sqlite:
            table_history_movie_data = [{
                "id": x.id,
                "action": x.action,
                "description": x.description,
                "language": x.language,
                "provider": x.provider,
                "radarrId": x.radarrId,
                "score": x.score,
                "subs_id": x.subs_id,
                "subtitles_path": x.subtitles_path,
                "timestamp": x.timestamp,
                "video_path": x.video_path,
                "matched": x.matched,
                "not_matched": x.not_matched,
            } for x in bind.execute(select(TableHistoryMovie)).all()]

            table_blacklist_movie_data = [{
                "id": x.id,
                "language": x.language,
                "provider": x.provider,
                "radarr_id": x.radarr_id,
                "subs_id": x.subs_id,
                "timestamp": x.timestamp,
            } for x in bind.execute(select(TableBlacklistMovie)).all()]
        with op.batch_alter_table('table_movies') as batch_op:
            batch_op.drop_column(column_name='rowid')
        if sqlite:
            op.bulk_insert(TableHistoryMovie.__table__, rows=table_history_movie_data)
            op.bulk_insert(TableBlacklistMovie.__table__, rows=table_blacklist_movie_data)

    if 'table_custom_score_profile_conditions' in tables:
        op.drop_table('table_custom_score_profile_conditions')

    if 'table_custom_score_profiles' in tables:
        op.drop_table('table_custom_score_profiles')


def downgrade():
    pass