mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-12 01:00:29 +08:00
refactoring
This commit is contained in:
parent
eb13da03be
commit
cf5bf8e147
35
kvmd/aiofs.py
Normal file
35
kvmd/aiofs.py
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
# ========================================================================== #
|
||||||
|
# #
|
||||||
|
# KVMD - The main Pi-KVM daemon. #
|
||||||
|
# #
|
||||||
|
# Copyright (C) 2018 Maxim Devaev <mdevaev@gmail.com> #
|
||||||
|
# #
|
||||||
|
# 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 aiofiles
|
||||||
|
import aiofiles.base
|
||||||
|
|
||||||
|
from . import aiotools
|
||||||
|
|
||||||
|
|
||||||
|
# =====
|
||||||
|
async def afile_write_now(afile: aiofiles.base.AiofilesContextManager, data: bytes) -> None:
|
||||||
|
await afile.write(data)
|
||||||
|
await afile.flush()
|
||||||
|
await aiotools.run_async(os.fsync, afile.fileno())
|
||||||
@ -20,7 +20,6 @@
|
|||||||
# ========================================================================== #
|
# ========================================================================== #
|
||||||
|
|
||||||
|
|
||||||
import os
|
|
||||||
import asyncio
|
import asyncio
|
||||||
import asyncio.queues
|
import asyncio.queues
|
||||||
import functools
|
import functools
|
||||||
@ -39,9 +38,6 @@ from typing import TypeVar
|
|||||||
from typing import Optional
|
from typing import Optional
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
import aiofiles
|
|
||||||
import aiofiles.base
|
|
||||||
|
|
||||||
from .logging import get_logger
|
from .logging import get_logger
|
||||||
|
|
||||||
|
|
||||||
@ -93,13 +89,6 @@ async def wait_first(*aws: Awaitable) -> Tuple[Set[asyncio.Future], Set[asyncio.
|
|||||||
return (await asyncio.wait(list(aws), return_when=asyncio.FIRST_COMPLETED))
|
return (await asyncio.wait(list(aws), return_when=asyncio.FIRST_COMPLETED))
|
||||||
|
|
||||||
|
|
||||||
# =====
|
|
||||||
async def afile_write_now(afile: aiofiles.base.AiofilesContextManager, data: bytes) -> None:
|
|
||||||
await afile.write(data)
|
|
||||||
await afile.flush()
|
|
||||||
await run_async(os.fsync, afile.fileno())
|
|
||||||
|
|
||||||
|
|
||||||
# =====
|
# =====
|
||||||
class AioNotifier:
|
class AioNotifier:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
|
|||||||
@ -45,6 +45,7 @@ from ....validators.os import valid_abs_dir
|
|||||||
from ....validators.os import valid_command
|
from ....validators.os import valid_command
|
||||||
|
|
||||||
from .... import aiotools
|
from .... import aiotools
|
||||||
|
from .... import aiofs
|
||||||
|
|
||||||
from .. import MsdError
|
from .. import MsdError
|
||||||
from .. import MsdIsBusyError
|
from .. import MsdIsBusyError
|
||||||
@ -340,7 +341,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
|
|||||||
|
|
||||||
async def write_image_chunk(self, chunk: bytes) -> int:
|
async def write_image_chunk(self, chunk: bytes) -> int:
|
||||||
assert self.__new_file
|
assert self.__new_file
|
||||||
await aiotools.afile_write_now(self.__new_file, chunk)
|
await aiofs.afile_write_now(self.__new_file, chunk)
|
||||||
self.__new_file_written += len(chunk)
|
self.__new_file_written += len(chunk)
|
||||||
now = time.time()
|
now = time.time()
|
||||||
if self.__new_file_tick + 1 < now:
|
if self.__new_file_tick + 1 < now:
|
||||||
|
|||||||
@ -39,6 +39,7 @@ import aiofiles.base
|
|||||||
from ...logging import get_logger
|
from ...logging import get_logger
|
||||||
|
|
||||||
from ... import aiotools
|
from ... import aiotools
|
||||||
|
from ... import aiofs
|
||||||
from ... import gpio
|
from ... import gpio
|
||||||
|
|
||||||
from ...yamlconf import Option
|
from ...yamlconf import Option
|
||||||
@ -325,7 +326,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
|
|||||||
|
|
||||||
async def write_image_chunk(self, chunk: bytes) -> int:
|
async def write_image_chunk(self, chunk: bytes) -> int:
|
||||||
assert self.__device_file
|
assert self.__device_file
|
||||||
await aiotools.afile_write_now(self.__device_file, chunk)
|
await aiofs.afile_write_now(self.__device_file, chunk)
|
||||||
self.__written += len(chunk)
|
self.__written += len(chunk)
|
||||||
return self.__written
|
return self.__written
|
||||||
|
|
||||||
@ -349,7 +350,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
|
|||||||
assert self.__device_info
|
assert self.__device_info
|
||||||
if self.__device_info.size - self.__written > _IMAGE_INFO_SIZE:
|
if self.__device_info.size - self.__written > _IMAGE_INFO_SIZE:
|
||||||
await self.__device_file.seek(self.__device_info.size - _IMAGE_INFO_SIZE)
|
await self.__device_file.seek(self.__device_info.size - _IMAGE_INFO_SIZE)
|
||||||
await aiotools.afile_write_now(self.__device_file, _make_image_info_bytes(name, self.__written, complete))
|
await aiofs.afile_write_now(self.__device_file, _make_image_info_bytes(name, self.__written, complete))
|
||||||
await self.__device_file.seek(0)
|
await self.__device_file.seek(0)
|
||||||
else:
|
else:
|
||||||
get_logger().error("Can't write image info because device is full")
|
get_logger().error("Can't write image info because device is full")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user