mirror of
https://code.lenaisten.de/Lenaisten/advent22.git
synced 2024-11-23 00:03:07 +00:00
apply experiments to WebDAV helper
This commit is contained in:
parent
e894aad746
commit
d51db8b836
2 changed files with 11 additions and 82 deletions
|
@ -1,7 +1,5 @@
|
|||
import re
|
||||
from contextlib import asynccontextmanager
|
||||
from io import BytesIO, TextIOWrapper
|
||||
from typing import AsyncContextManager, AsyncIterator
|
||||
from io import BytesIO
|
||||
|
||||
from cache import AsyncTTL
|
||||
from webdav3.client import Client as WebDAVclient
|
||||
|
@ -44,38 +42,25 @@ class WebDAV:
|
|||
|
||||
return cls._webdav_client.check(path)
|
||||
|
||||
@AsyncTTL(time_to_live=SETTINGS.cache_ttl)
|
||||
@classmethod
|
||||
async def read_buffer(cls, path: str) -> AsyncContextManager[BytesIO]:
|
||||
async def read_bytes(cls, path: str) -> bytes:
|
||||
"""
|
||||
Datei aus Pfad `path` in einen `BytesIO` Puffer laden
|
||||
Datei aus Pfad `path` als bytes laden
|
||||
"""
|
||||
|
||||
@AsyncTTL(time_to_live=SETTINGS.cache_ttl)
|
||||
async def inner() -> BytesIO:
|
||||
buffer = BytesIO()
|
||||
cls._webdav_client.resource(path).write_to(buffer)
|
||||
return buffer
|
||||
|
||||
@asynccontextmanager
|
||||
async def ctx() -> AsyncIterator[BytesIO]:
|
||||
buffer = await inner()
|
||||
buffer.seek(0)
|
||||
yield buffer
|
||||
|
||||
return ctx()
|
||||
buffer = BytesIO()
|
||||
cls._webdav_client.resource(path).write_to(buffer)
|
||||
return buffer.read()
|
||||
|
||||
@AsyncTTL(time_to_live=SETTINGS.cache_ttl)
|
||||
@classmethod
|
||||
async def read_text(cls, path: str, encoding="utf-8") -> str:
|
||||
async def read_str(cls, path: str, encoding="utf-8") -> str:
|
||||
"""
|
||||
Datei aus Pfad `path` als string zurückgeben
|
||||
Datei aus Pfad `path` als string laden
|
||||
"""
|
||||
|
||||
async with await cls.read_buffer(path) as buffer:
|
||||
tio = TextIOWrapper(buffer, encoding=encoding)
|
||||
tio.seek(0)
|
||||
|
||||
return tio.read().strip()
|
||||
return (await cls.read_bytes(path)).decode(encoding=encoding).strip()
|
||||
|
||||
@classmethod
|
||||
async def write_buffer(cls, path: str, buffer: BytesIO) -> None:
|
||||
|
@ -86,7 +71,7 @@ class WebDAV:
|
|||
cls._webdav_client.resource(path).read_from(buffer)
|
||||
|
||||
@classmethod
|
||||
async def write_text(cls, path: str, content: str, encoding="utf-8") -> None:
|
||||
async def write_str(cls, path: str, content: str, encoding="utf-8") -> None:
|
||||
"""
|
||||
String `content` in Datei in Pfad `path` schreiben
|
||||
"""
|
||||
|
|
|
@ -1,56 +0,0 @@
|
|||
import asyncio
|
||||
import functools
|
||||
from io import BytesIO
|
||||
|
||||
from cache import AsyncLRU
|
||||
|
||||
FILES = __file__, "pyproject.toml"
|
||||
REPS = 3
|
||||
|
||||
#
|
||||
# sync impl
|
||||
#
|
||||
|
||||
|
||||
@functools.lru_cache
|
||||
def get_bytes_sync(fn) -> bytes:
|
||||
print("sync open")
|
||||
with open(fn, "rb") as file:
|
||||
return file.readline()
|
||||
|
||||
|
||||
def get_buf_sync(fn) -> BytesIO:
|
||||
return BytesIO(get_bytes_sync(fn))
|
||||
|
||||
|
||||
def main_sync() -> None:
|
||||
for fn in FILES:
|
||||
for _ in range(REPS):
|
||||
print(get_buf_sync(fn).read())
|
||||
|
||||
|
||||
#
|
||||
# async impl
|
||||
#
|
||||
|
||||
|
||||
@AsyncLRU()
|
||||
async def get_bytes_async(fn) -> bytes:
|
||||
print("async open")
|
||||
with open(fn, "rb") as file:
|
||||
return file.readline()
|
||||
|
||||
|
||||
async def get_buf_async(fn) -> BytesIO:
|
||||
return BytesIO(await get_bytes_async(fn))
|
||||
|
||||
|
||||
async def main_async() -> None:
|
||||
for fn in FILES:
|
||||
for _ in range(REPS):
|
||||
print((await get_buf_async(fn)).read())
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main_sync()
|
||||
asyncio.run(main_async())
|
Loading…
Reference in a new issue