File: mount.py

package info (click to toggle)
bootstrap-vz 0.9.11%2B20180121git-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 2,244 kB
  • sloc: python: 8,800; sh: 813; makefile: 16
file content (49 lines) | stat: -rw-r--r-- 1,760 bytes parent folder | download | duplicates (2)
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
from abstract import AbstractPartition
import os.path
from bootstrapvz.common.tools import log_check_call


class Mount(object):
    """Represents a mount into the partition
    """
    def __init__(self, source, destination, opts):
        """
        :param str,AbstractPartition source: The path from where we mount or a partition
        :param str destination: The path of the mountpoint
        :param list opts: List of options to pass to the mount command
        """
        self.source      = source
        self.destination = destination
        self.opts        = opts

    def mount(self, prefix):
        """Performs the mount operation or forwards it to another partition

        :param str prefix: Path prefix of the mountpoint
        """
        mount_dir = os.path.join(prefix, self.destination)
        # If the source is another partition, we tell that partition to mount itself
        if isinstance(self.source, AbstractPartition):
            self.source.mount(destination=mount_dir)
        else:
            log_check_call(['mount'] + self.opts + [self.source, mount_dir])
        self.mount_dir = mount_dir

    def unmount(self):
        """Performs the unmount operation or asks the partition to unmount itself
        """
        # If its a partition, it can unmount itself
        if isinstance(self.source, AbstractPartition):
            self.source.unmount()
        else:
            log_check_call(['umount', self.mount_dir])
        del self.mount_dir

    def __getstate__(self):
        state = self.__dict__.copy()
        state['__class__'] = self.__module__ + '.' + self.__class__.__name__
        return state

    def __setstate__(self, state):
        for key in state:
            self.__dict__[key] = state[key]