Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/olpc/datastore/sxattr.py
blob: 78a64f367bef4c88985934fba1828926c33d668a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
""" 
simplified xattr
~~~~~~~~~~~~~~~~~~~~
automatically manage prefixes into the xattr namespace

""" 

__author__ = 'Benjamin Saller <bcsaller@objectrealms.net>'
__docformat__ = 'restructuredtext'
__copyright__ = 'Copyright ObjectRealms, LLC, 2007'
__license__  = 'The GNU Public License V2+'


import xattr

class Xattr(object):
    def __init__(self, filename, prefix, implicitUser=True):
        self.filename = filename
        self.prefix=[]
        if implicitUser: self.prefix.append('user')
        self.prefix.append(prefix)
        self.ns = '.'.join(self.prefix)
        self.keyed = lambda x: '.'.join((self.ns, x))
        
    def __getitem__(self, key):
        v = xattr.getxattr(self.filename, self.keyed(key))
        return v.decode('utf-8')

    def __setitem__(self, key, value):
        if isinstance(value, unicode):
            value = value.encode("utf-8")
        else:
            value = str(value)
        xattr.setxattr(self.filename, self.keyed(key), value)

    def __delitem__(self, key):
        xattr.removexattr(self.filename, self.keyed(key))

    def get(self, key, default=None):
        try:
            return self[key]
        except IOError:
            return default
        
    def iterkeys(self):
        all = xattr.listxattr(self.filename)
        for key in all:
            if key.startswith(self.ns):
                yield key[len(self.ns) + 1:]
            
    def keys(self):
        return list(self.iterkeys())