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

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

  
38 40
from dbworker import DBWorker
39 41

  
42
def create_tables(engine):
43
    metadata = MetaData()
44
    columns=[]
45
    columns.append(Column('owner', String(256), primary_key=True))
46
    columns.append(Column('name', String(256), primary_key=True))
47
    columns.append(Column('member', String(256), primary_key=True))
48
    groups = Table('groups', metadata, *columns, mysql_engine='InnoDB')
49
    
50
    # place an index on member
51
    Index('idx_groups_member', groups.c.member)
52
        
53
    metadata.create_all(engine)
54
    return metadata.sorted_tables
55
    
40 56
class Groups(DBWorker):
41 57
    """Groups are named collections of members, belonging to an owner."""
42 58
    
43 59
    def __init__(self, **params):
44 60
        DBWorker.__init__(self, **params)
45
        metadata = MetaData()
46
        columns=[]
47
        columns.append(Column('owner', String(256), primary_key=True))
48
        columns.append(Column('name', String(256), primary_key=True))
49
        columns.append(Column('member', String(256), primary_key=True))
50
        self.groups = Table('groups', metadata, *columns, mysql_engine='InnoDB')
51
        
52
        # place an index on member
53
        Index('idx_groups_member', self.groups.c.member)
61
        try:
62
            metadata = MetaData(self.engine)
63
            self.groups = Table('groups', metadata, autoload=True)
64
        except NoSuchTableError:
65
            tables = create_tables(self.engine)
66
            map(lambda t: self.__setattr__(t.name, t), tables)
54 67
        
55
        metadata.create_all(self.engine)
56
    
57 68
    def group_names(self, owner):
58 69
        """List all group names belonging to owner."""
59 70
        

Also available in: Unified diff