atomicwrites: remove dependency on abandoned library

This commit is contained in:
Ben Boeckel 2025-02-13 09:00:58 +01:00 committed by Hugo Osvaldo Barrera
parent 12a06917db
commit 8b063c39cb
9 changed files with 35 additions and 10 deletions

View file

@ -10,7 +10,6 @@ packages:
- python-installer
- python-setuptools-scm
# Runtime dependencies:
- python-atomicwrites
- python-click
- python-click-log
- python-click-threading

View file

@ -21,7 +21,6 @@ repos:
- types-setuptools
- types-docutils
- types-requests
- types-atomicwrites
- repo: https://github.com/charliermarsh/ruff-pre-commit
rev: 'v0.2.2'
hooks:

View file

@ -9,6 +9,11 @@ Package maintainers and users who have to manually update their installation
may want to subscribe to `GitHub's tag feed
<https://github.com/pimutils/vdirsyncer/tags.atom>`_.
Version 0.19.4
==============
- Remove dependency on abandoned ``atomicwrites`` library.
Version 0.19.3
==============

View file

@ -16,8 +16,6 @@ requirements = [
"click>=5.0,<9.0",
"click-log>=0.3.0, <0.5.0",
"requests >=2.20.0",
# https://github.com/untitaker/python-atomicwrites/commit/4d12f23227b6a944ab1d99c507a69fdbc7c9ed6d # noqa
"atomicwrites>=0.1.7",
"aiohttp>=3.8.2,<4.0.0",
"aiostream>=0.4.3,<0.5.0",
]

View file

@ -10,7 +10,6 @@ from typing import Any
import aiohttp
import click
from atomicwrites import atomic_write
from .. import BUGTRACKER_HOME
from .. import DOCS_HOME
@ -21,6 +20,7 @@ from ..sync.exceptions import PartialSync
from ..sync.exceptions import StorageEmpty
from ..sync.exceptions import SyncConflict
from ..sync.status import SqliteStatus
from ..utils import atomic_write
from ..utils import expand_path
from ..utils import get_storage_init_args
from . import cli_logger

View file

@ -5,9 +5,8 @@ import logging
import os
import subprocess
from atomicwrites import atomic_write
from .. import exceptions
from ..utils import atomic_write
from ..utils import checkdir
from ..utils import expand_path
from ..utils import generate_href

View file

@ -11,9 +11,9 @@ from threading import Thread
import aiohttp
import click
from atomicwrites import atomic_write
from .. import exceptions
from ..utils import atomic_write
from ..utils import checkdir
from ..utils import expand_path
from ..utils import open_graphical_browser

View file

@ -8,9 +8,8 @@ import logging
import os
from typing import Iterable
from atomicwrites import atomic_write
from .. import exceptions
from ..utils import atomic_write
from ..utils import checkfile
from ..utils import expand_path
from ..utils import get_etag_from_file

View file

@ -1,8 +1,10 @@
from __future__ import annotations
import contextlib
import functools
import os
import sys
import tempfile
import uuid
from inspect import getfullargspec
from typing import Callable
@ -220,3 +222,27 @@ def open_graphical_browser(url, new=0, autoraise=True):
return
raise RuntimeError("No graphical browser found. Please open the URL " "manually.")
@contextlib.contextmanager
def atomic_write(dest, mode="wb", overwrite=False):
if "w" not in mode:
raise RuntimeError("`atomic_write` requires write access")
fd, src = tempfile.mkstemp(prefix=os.path.basename(dest), dir=os.path.dirname(dest))
file = os.fdopen(fd, mode=mode)
try:
yield file
except Exception:
os.unlink(src)
raise
else:
file.flush()
file.close()
if overwrite:
os.rename(src, dest)
else:
os.link(src, dest)
os.unlink(src)