Statistics
| Branch: | Tag: | Revision:

root / snf-pithos-backend / pithos / backends / lib / sqlalchemy / alembic / versions / 27381099d477_alter_public_add_col.py @ 72e191e5

History | View | Annotate | Download (1.1 kB)

1
"""alter public add column url
2

3
Revision ID: 27381099d477
4
Revises: 2a309a9a3438
5
Create Date: 2013-03-20 16:14:20.058077
6

7
"""
8

    
9
# revision identifiers, used by Alembic.
10
revision = '27381099d477'
11
down_revision = '2a309a9a3438'
12

    
13
from alembic import op
14
import sqlalchemy as sa
15

    
16
from pithos.backends.modular import ULTIMATE_ANSWER
17

    
18

    
19
def upgrade():
20
    op.add_column('public', sa.Column('url', sa.String(2048)))
21
    op.create_unique_constraint('idx_public_url', 'public', ['url'])
22

    
23
    # migrate old rows
24
    p = sa.sql.table(
25
        'public',
26
        sa.sql.column('public_id', sa.Integer),
27
        sa.sql.column('url', sa.String),
28
    )
29

    
30
    try:
31
        from pithos.api.short_url import encode_url
32
    except ImportError:
33
        return
34
    else:
35
        get_url = lambda x: encode_url(x + ULTIMATE_ANSWER)
36
        conn = op.get_bind()
37
        s = sa.select([p.c.public_id])
38
        rows = conn.execute(s).fetchall()
39
        for r in rows:
40
            s = p.update().values(url=get_url(r[0])).where(
41
                p.c.public_id == r[0])
42
            op.execute(s)
43

    
44

    
45
def downgrade():
46
    op.drop_constraint('idx_public_url', 'public')
47
    op.drop_column('public', 'url')