Revision 6a82f89f snf-pithos-backend/pithos/backends/lib/sqlalchemy/public.py

b/snf-pithos-backend/pithos/backends/lib/sqlalchemy/public.py
35 35
from sqlalchemy import Table, Column, String, Integer, Boolean, MetaData
36 36
from sqlalchemy.sql import and_, select
37 37
from sqlalchemy.schema import Index
38
from sqlalchemy.exc import NoSuchTableError
38 39

  
40
def create_tables(engine):
41
    metadata = MetaData()
42
    columns=[]
43
    columns.append(Column('public_id', Integer, primary_key=True))
44
    columns.append(Column('path', String(2048), nullable=False))
45
    columns.append(Column('active', Boolean, nullable=False, default=True))
46
    public = Table('public', metadata, *columns, mysql_engine='InnoDB', sqlite_autoincrement=True)
47
    # place an index on path
48
    Index('idx_public_path', public.c.path, unique=True)
49
    metadata.create_all(engine)
50
    return metadata.sorted_tables
39 51

  
40 52
class Public(DBWorker):
41 53
    """Paths can be marked as public."""
42 54
    
43 55
    def __init__(self, **params):
44 56
        DBWorker.__init__(self, **params)
45
        metadata = MetaData()
46
        columns=[]
47
        columns.append(Column('public_id', Integer, primary_key=True))
48
        columns.append(Column('path', String(2048), nullable=False))
49
        columns.append(Column('active', Boolean, nullable=False, default=True))
50
        self.public = Table('public', metadata, *columns, mysql_engine='InnoDB', sqlite_autoincrement=True)
51
        # place an index on path
52
        Index('idx_public_path', self.public.c.path, unique=True)
53
        metadata.create_all(self.engine)
57
        try:
58
            metadata = MetaData(self.engine)
59
            self.public = Table('public', metadata, autoload=True)
60
        except NoSuchTableError:
61
            tables = create_tables(self.engine)
62
            map(lambda t: self.__setattr__(t.name, t), tables)
54 63
    
55 64
    def public_set(self, path):
56 65
        s = select([self.public.c.public_id])

Also available in: Unified diff