~gnuoy/charms/trusty/neutron-openvswitch/neutron-contexts

« back to all changes in this revision

Viewing changes to hooks/charmhelpers/core/fstab.py

  • Committer: james.page at ubuntu
  • Date: 2014-12-15 09:12:45 UTC
  • mfrom: (36.1.8 neutron-openvswitch)
  • Revision ID: james.page@ubuntu.com-20141215091245-jm3e66yel69u7zbh
[corey.bryant,r=james-page] Sort out charmhelpers issues.

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
 
4
4
__author__ = 'Jorge Niedbalski R. <jorge.niedbalski@canonical.com>'
5
5
 
 
6
import io
6
7
import os
7
8
 
8
9
 
9
 
class Fstab(file):
 
10
class Fstab(io.FileIO):
10
11
    """This class extends file in order to implement a file reader/writer
11
12
    for file `/etc/fstab`
12
13
    """
24
25
                options = "defaults"
25
26
 
26
27
            self.options = options
27
 
            self.d = d
28
 
            self.p = p
 
28
            self.d = int(d)
 
29
            self.p = int(p)
29
30
 
30
31
        def __eq__(self, o):
31
32
            return str(self) == str(o)
45
46
            self._path = path
46
47
        else:
47
48
            self._path = self.DEFAULT_PATH
48
 
        file.__init__(self, self._path, 'r+')
 
49
        super(Fstab, self).__init__(self._path, 'rb+')
49
50
 
50
51
    def _hydrate_entry(self, line):
51
52
        # NOTE: use split with no arguments to split on any
58
59
    def entries(self):
59
60
        self.seek(0)
60
61
        for line in self.readlines():
 
62
            line = line.decode('us-ascii')
61
63
            try:
62
 
                if not line.startswith("#"):
 
64
                if line.strip() and not line.startswith("#"):
63
65
                    yield self._hydrate_entry(line)
64
66
            except ValueError:
65
67
                pass
75
77
        if self.get_entry_by_attr('device', entry.device):
76
78
            return False
77
79
 
78
 
        self.write(str(entry) + '\n')
 
80
        self.write((str(entry) + '\n').encode('us-ascii'))
79
81
        self.truncate()
80
82
        return entry
81
83
 
82
84
    def remove_entry(self, entry):
83
85
        self.seek(0)
84
86
 
85
 
        lines = self.readlines()
 
87
        lines = [l.decode('us-ascii') for l in self.readlines()]
86
88
 
87
89
        found = False
88
90
        for index, line in enumerate(lines):
97
99
        lines.remove(line)
98
100
 
99
101
        self.seek(0)
100
 
        self.write(''.join(lines))
 
102
        self.write(''.join(lines).encode('us-ascii'))
101
103
        self.truncate()
102
104
        return True
103
105