aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/db/sql/migrations.py
blob: 1d822cd97bc05a813264093afc99634a82858021 (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
107
108
109
110
111
112
113
114
115
116
117
118
# GNU MediaGoblin -- federated, autonomous media hosting
# Copyright (C) 2011, 2012 MediaGoblin contributors.  See AUTHORS.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

import datetime

from sqlalchemy import (MetaData, Table, Column, Boolean, SmallInteger,
                        Integer, Unicode, UnicodeText, DateTime, ForeignKey)

from mediagoblin.db.sql.util import RegisterMigration
from mediagoblin.db.sql.models import MediaEntry, Collection, User, \
        ProcessingMetaData

MIGRATIONS = {}


@RegisterMigration(1, MIGRATIONS)
def ogg_to_webm_audio(db_conn):
    metadata = MetaData(bind=db_conn.bind)

    file_keynames = Table('core__file_keynames', metadata, autoload=True,
                          autoload_with=db_conn.bind)

    db_conn.execute(
        file_keynames.update().where(file_keynames.c.name == 'ogg').
            values(name='webm_audio')
    )
    db_conn.commit()


@RegisterMigration(2, MIGRATIONS)
def add_wants_notification_column(db_conn):
    metadata = MetaData(bind=db_conn.bind)

    users = Table('core__users', metadata, autoload=True,
            autoload_with=db_conn.bind)

    col = Column('wants_comment_notification', Boolean,
            default=True, nullable=True)
    col.create(users, populate_defaults=True)
    db_conn.commit()


@RegisterMigration(3, MIGRATIONS)
def add_transcoding_progress(db_conn):
    metadata = MetaData(bind=db_conn.bind)

    media_entry = Table('core__media_entries', metadata, autoload=True,
            autoload_with=db_conn.bind)

    col = Column('transcoding_progress', SmallInteger)
    col.create(media_entry)
    db_conn.commit()


@RegisterMigration(4, MIGRATIONS)
def add_collection_tables(db_conn):
    metadata = MetaData(bind=db_conn.bind)

    collection = Table('core__collections', metadata,
                       Column('id', Integer, primary_key=True),
                       Column('title', Unicode, nullable=False),
                       Column('slug', Unicode),
                       Column('created', DateTime, nullable=False, default=datetime.datetime.now, index=True),
                       Column('description', UnicodeText),
                       Column('creator', Integer, ForeignKey(User.id), nullable=False),
                       Column('items', Integer, default=0))

    collection_item = Table('core__collection_items', metadata,
                            Column('id', Integer, primary_key=True),
                            Column('media_entry', Integer, ForeignKey(MediaEntry.id), nullable=False, index=True),
                            Column('collection', Integer, ForeignKey(Collection.id), nullable=False),
                            Column('note', UnicodeText, nullable=True),
                            Column('added', DateTime, nullable=False, default=datetime.datetime.now),
                            Column('position', Integer))

    collection.create()
    collection_item.create()

    db_conn.commit()


@RegisterMigration(5, MIGRATIONS)
def add_mediaentry_collected(db_conn):
    metadata = MetaData(bind=db_conn.bind)

    media_entry = Table('core__media_entries', metadata, autoload=True,
            autoload_with=db_conn.bind)

    col = Column('collected', Integer, default=0)
    col.create(media_entry)
    db_conn.commit()


@RegisterMigration(6, MIGRATIONS)
def create_processing_metadata_table(db):
    metadata = MetaData(bind=db.bind)

    metadata_table = Table('core__processing_metadata', metadata,
            Column('id', Integer, primary_key=True),
            Column('media_entry_id', Integer, ForeignKey(MediaEntry.id),
                nullable=False, index=True),
            Column('callback_url', Unicode))

    metadata_table.create()
    db.commit()