Statistics
| Branch: | Tag: | Revision:

root / pithos / backends / lib / groups.py @ a9b3f29d

History | View | Annotate | Download (4.4 kB)

1
# Copyright 2011 GRNET S.A. All rights reserved.
2
# 
3
# Redistribution and use in source and binary forms, with or
4
# without modification, are permitted provided that the following
5
# conditions are met:
6
# 
7
#   1. Redistributions of source code must retain the above
8
#      copyright notice, this list of conditions and the following
9
#      disclaimer.
10
# 
11
#   2. Redistributions in binary form must reproduce the above
12
#      copyright notice, this list of conditions and the following
13
#      disclaimer in the documentation and/or other materials
14
#      provided with the distribution.
15
# 
16
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
# POSSIBILITY OF SUCH DAMAGE.
28
# 
29
# The views and conclusions contained in the software and
30
# documentation are those of the authors and should not be
31
# interpreted as representing official policies, either expressed
32
# or implied, of GRNET S.A.
33

    
34
from dbworker import DBWorker
35

    
36

    
37
class Groups(DBWorker):
38
    """Groups are named collections of members, belonging to an owner."""
39
    
40
    def __init__(self, **params):
41
        DBWorker.__init__(self, **params)
42
        execute = self.execute
43
        
44
        execute(""" create table if not exists groups
45
                          ( owner  text,
46
                            name   text,
47
                            member text,
48
                            primary key (owner, name, member) ) """)
49
        execute(""" create index if not exists idx_groups_member
50
                    on groups(member) """)
51
    
52
    def group_names(self, owner):
53
        """List all group names belonging to owner."""
54
        
55
        q = "select distinct name from groups where owner = ?"
56
        self.execute(q, (owner,))
57
        return [r[0] for r in self.fetchall()]
58
    
59
    def group_list(self, owner):
60
        """List all (group, member) tuples belonging to owner."""
61
        
62
        q = "select name, member from groups where owner = ?"
63
        self.execute(q, (owner,))
64
        return self.fetchall()
65
    
66
    def group_add(self, owner, group, member):
67
        """Add a member to a group."""
68
        
69
        q = "insert or ignore into groups (owner, name, member) values (?, ?, ?)"
70
        self.execute(q, (owner, group, member))
71
    
72
    def group_addmany(self, owner, group, members):
73
        """Add members to a group."""
74
        
75
        q = "insert or ignore into groups (owner, name, member) values (?, ?, ?)"
76
        self.executemany(q, ((owner, group, member) for member in members))
77
    
78
    def group_remove(self, owner, group, member):
79
        """Remove a member from a group."""
80
        
81
        q = "delete from groups where owner = ? and name = ? and member = ?"
82
        self.execute(q, (owner, group, member))
83
    
84
    def group_delete(self, owner, group):
85
        """Delete a group."""
86
        
87
        q = "delete from groups where owner = ? and name = ?"
88
        self.execute(q, (owner, group))
89
    
90
    def group_destroy(self, owner):
91
        """Delete all groups belonging to owner."""
92
        
93
        q = "delete from groups where owner = ?"
94
        self.execute(q, (owner,))
95
    
96
    def group_members(self, owner, group):
97
        """Return the list of members of a group."""
98
        
99
        q = "select member from groups where owner = ? and name = ?"
100
        self.execute(q, (owner, group))
101
        return [r[0] for r in self.fetchall()]
102
    
103
    def group_check(self, owner, group, member):
104
        """Check if a member is in a group."""
105
        
106
        q = "select 1 from groups where owner = ? and name = ? and member = ?"
107
        self.execute(q, (group, member))
108
        return bool(self.fetchone())
109
    
110
    def group_parents(self, member):
111
        """Return all (owner, group) tuples that contain member."""
112
        
113
        q = "select owner, name from groups where member = ?"
114
        self.execute(q, (member,))
115
        return self.fetchall()