mirror of
https://github.com/saymrwulf/uhd.git
synced 2026-05-15 21:01:26 +00:00
This will return False on ismounted() if a Mount class is mounted, but in the wrong spot.
97 lines
2.8 KiB
Python
97 lines
2.8 KiB
Python
#
|
|
# Copyright 2020 Ettus Research, a National Instruments Brand
|
|
#
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
#
|
|
"""
|
|
Utilities for creating a mount point
|
|
"""
|
|
|
|
import subprocess
|
|
import os
|
|
from usrp_mpm.mpmlog import get_logger
|
|
|
|
class Mount():
|
|
"""
|
|
Class for creating a mount point
|
|
"""
|
|
|
|
def __init__(self, devicepath, mountpoint, options=None, log=None):
|
|
assert isinstance(devicepath, str)
|
|
assert isinstance(mountpoint, str)
|
|
assert isinstance(options, list)
|
|
self.devicepath = devicepath
|
|
self.mountpoint = mountpoint
|
|
self.options = options
|
|
if log is None:
|
|
self.log = get_logger("Mount")
|
|
else:
|
|
self.log = log.getChild("Mount")
|
|
self.log.trace("Early initialization: devicepath={}, mountpoint={}, options={}".format(
|
|
devicepath, mountpoint, options))
|
|
|
|
def ismounted(self):
|
|
"""
|
|
Returns true if the mount point is mounted
|
|
"""
|
|
assert self.devicepath is not None
|
|
with open("/etc/mtab") as mtab_f:
|
|
return any(
|
|
line.split()[0] == self.devicepath and line.split()[1] == self.mountpoint \
|
|
for line in mtab_f
|
|
)
|
|
|
|
def get_mount_point(self):
|
|
"""
|
|
returns the mount point (None when not mounted)
|
|
"""
|
|
if not self.ismounted():
|
|
return None
|
|
return self.mountpoint
|
|
|
|
def prepare_mountpoint(self):
|
|
"""
|
|
Creates the mount point directory (if not already existing)
|
|
"""
|
|
if not os.path.exists(self.mountpoint):
|
|
os.makedirs(self.mountpoint)
|
|
return True
|
|
|
|
def delete_mountpoint(self):
|
|
"""
|
|
Deletes the mount point directory
|
|
"""
|
|
os.removedirs(self.mountpoint)
|
|
return True
|
|
|
|
def mount(self):
|
|
"""
|
|
Mounts the mount point
|
|
"""
|
|
if self.ismounted():
|
|
self.log.debug("{} was already mounted".format(self.mountpoint))
|
|
return True
|
|
self.prepare_mountpoint()
|
|
self.log.debug("Mounting {}".format(self.mountpoint))
|
|
cmd = ['mount']
|
|
if self.options:
|
|
cmd.extend(self.options)
|
|
cmd.append(self.devicepath)
|
|
cmd.append(self.mountpoint)
|
|
proc = subprocess.run(cmd, check=True)
|
|
self.log.trace(proc)
|
|
return True
|
|
|
|
def unmount(self):
|
|
"""
|
|
Unmounts the mount point
|
|
"""
|
|
if not self.ismounted():
|
|
self.log.warning("{} was not mounted".format(self.mountpoint))
|
|
return True
|
|
self.log.debug("Unmounting {}".format(self.mountpoint))
|
|
cmd = ['umount', self.mountpoint]
|
|
proc = subprocess.run(cmd, check=True)
|
|
self.log.trace(proc)
|
|
self.delete_mountpoint()
|
|
return True
|