Revision 2715ade4 snf-pithos-backend/pithos/backends/lib/sqlite/groups.py

b/snf-pithos-backend/pithos/backends/lib/sqlite/groups.py
1 1
# Copyright 2011-2012 GRNET S.A. All rights reserved.
2
# 
2
#
3 3
# Redistribution and use in source and binary forms, with or
4 4
# without modification, are permitted provided that the following
5 5
# conditions are met:
6
# 
6
#
7 7
#   1. Redistributions of source code must retain the above
8 8
#      copyright notice, this list of conditions and the following
9 9
#      disclaimer.
10
# 
10
#
11 11
#   2. Redistributions in binary form must reproduce the above
12 12
#      copyright notice, this list of conditions and the following
13 13
#      disclaimer in the documentation and/or other materials
14 14
#      provided with the distribution.
15
# 
15
#
16 16
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 17
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 18
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
......
25 25
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 26
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 27
# POSSIBILITY OF SUCH DAMAGE.
28
# 
28
#
29 29
# The views and conclusions contained in the software and
30 30
# documentation are those of the authors and should not be
31 31
# interpreted as representing official policies, either expressed
......
38 38

  
39 39
class Groups(DBWorker):
40 40
    """Groups are named collections of members, belonging to an owner."""
41
    
41

  
42 42
    def __init__(self, **params):
43 43
        DBWorker.__init__(self, **params)
44 44
        execute = self.execute
45
        
45

  
46 46
        execute(""" create table if not exists groups
47 47
                          ( owner  text,
48 48
                            name   text,
......
50 50
                            primary key (owner, name, member) ) """)
51 51
        execute(""" create index if not exists idx_groups_member
52 52
                    on groups(member) """)
53
    
53

  
54 54
    def group_names(self, owner):
55 55
        """List all group names belonging to owner."""
56
        
56

  
57 57
        q = "select distinct name from groups where owner = ?"
58 58
        self.execute(q, (owner,))
59 59
        return [r[0] for r in self.fetchall()]
60
    
60

  
61 61
    def group_dict(self, owner):
62 62
        """Return a dict mapping group names to member lists for owner."""
63
        
63

  
64 64
        q = "select name, member from groups where owner = ?"
65 65
        self.execute(q, (owner,))
66 66
        d = defaultdict(list)
67 67
        for group, member in self.fetchall():
68 68
            d[group].append(member)
69 69
        return d
70
    
70

  
71 71
    def group_add(self, owner, group, member):
72 72
        """Add a member to a group."""
73
        
73

  
74 74
        q = "insert or ignore into groups (owner, name, member) values (?, ?, ?)"
75 75
        self.execute(q, (owner, group, member))
76
    
76

  
77 77
    def group_addmany(self, owner, group, members):
78 78
        """Add members to a group."""
79
        
79

  
80 80
        q = "insert or ignore into groups (owner, name, member) values (?, ?, ?)"
81 81
        self.executemany(q, ((owner, group, member) for member in members))
82
    
82

  
83 83
    def group_remove(self, owner, group, member):
84 84
        """Remove a member from a group."""
85
        
85

  
86 86
        q = "delete from groups where owner = ? and name = ? and member = ?"
87 87
        self.execute(q, (owner, group, member))
88
    
88

  
89 89
    def group_delete(self, owner, group):
90 90
        """Delete a group."""
91
        
91

  
92 92
        q = "delete from groups where owner = ? and name = ?"
93 93
        self.execute(q, (owner, group))
94
    
94

  
95 95
    def group_destroy(self, owner):
96 96
        """Delete all groups belonging to owner."""
97
        
97

  
98 98
        q = "delete from groups where owner = ?"
99 99
        self.execute(q, (owner,))
100
    
100

  
101 101
    def group_members(self, owner, group):
102 102
        """Return the list of members of a group."""
103
        
103

  
104 104
        q = "select member from groups where owner = ? and name = ?"
105 105
        self.execute(q, (owner, group))
106 106
        return [r[0] for r in self.fetchall()]
107
    
107

  
108 108
    def group_check(self, owner, group, member):
109 109
        """Check if a member is in a group."""
110
        
110

  
111 111
        q = "select 1 from groups where owner = ? and name = ? and member = ?"
112 112
        self.execute(q, (group, member))
113 113
        return bool(self.fetchone())
114
    
114

  
115 115
    def group_parents(self, member):
116 116
        """Return all (owner, group) tuples that contain member."""
117
        
117

  
118 118
        q = "select owner, name from groups where member = ?"
119 119
        self.execute(q, (member,))
120 120
        return self.fetchall()

Also available in: Unified diff