diff options
author | Devaev Maxim <[email protected]> | 2019-11-08 03:53:00 +0300 |
---|---|---|
committer | Devaev Maxim <[email protected]> | 2019-11-08 03:53:00 +0300 |
commit | fa40676136483dd287caf5df324ca429e5adbace (patch) | |
tree | aafa78f9d2f26c86bcb9ea484bc51ab4a158541f /kvmd/plugins/msd/otg/fs.py | |
parent | 13dcbc0c62461da626f7aea9712da593c45102df (diff) |
otg msd: notify about free space while uploading
Diffstat (limited to 'kvmd/plugins/msd/otg/fs.py')
-rw-r--r-- | kvmd/plugins/msd/otg/fs.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/kvmd/plugins/msd/otg/fs.py b/kvmd/plugins/msd/otg/fs.py new file mode 100644 index 00000000..ac91f89f --- /dev/null +++ b/kvmd/plugins/msd/otg/fs.py @@ -0,0 +1,58 @@ +# ========================================================================== # +# # +# KVMD - The main Pi-KVM daemon. # +# # +# Copyright (C) 2018 Maxim Devaev <[email protected]> # +# # +# This program is free software: you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation, either version 3 of the License, or # +# (at your option) any later version. # +# # +# This program is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see <https://www.gnu.org/licenses/>. # +# # +# ========================================================================== # + + +import os +import dataclasses + +from typing import Optional + +from ....logging import get_logger + + +# ===== [email protected](frozen=True) +class FsSpace: + size: int + free: int + + +# ===== +def get_file_size(path: str) -> int: + try: + return os.path.getsize(path) + except Exception as err: + get_logger().warning("Can't get size of file %s: %s", path, err) + return -1 + + +def get_fs_space(path: str, fatal: bool) -> Optional[FsSpace]: + try: + st = os.statvfs(path) + except Exception as err: + if fatal: + raise + get_logger().warning("Can't get free space of filesystem %s: %s", path, err) + return None + return FsSpace( + size=(st.f_blocks * st.f_frsize), + free=(st.f_bavail * st.f_frsize), + ) |