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