Skip to main content

Safe copy, move, and write on remote drives

Project description

TestStatus PyPiStatus BlackStyle BlackPackStyle MITLicenseBadge

A python-library to help with the completeness of files when moving, copying and writing. Writing a file is not atomic. In the worst case the process writing the file dies while the file is not yet complete. Also in some network-file-systems, the destination of a move or copy might show up before it is complete. Incomplete files are a potential risk for the integrity of your data. In the best case your reading process crashes, but in the worst case the incompleteness goes unnoticed. This package reduces the risk of having incomplete files by making all writing operations write to a temporary file in the destination’s directory first before renaming it to its final destination. On most file-systems this final renamig is atomic.

Install

pip install rename_after_writing

Functions

Path

Writes to a temporary path and move it to your desired path on exit.

import rename_after_writing as rnw

with rnw.Path(path="my_file.txt") as tmp_path:
    with open(tmp_path, "wt") as f:
        for i in range(10):
            f.write(input())

Note, that while you write to the file (while you provide input()) the file is written into a temporary file named path + . + uuid(). After writing, on exit of the contextmanager, the temporary file is moved to path.

open

Just like python’s built in open() but when writing (mode=w) everything is writen to a temporary file in the destination’s directory before the temporary file is renamed to the final destination.

import rename_after_writing as rnw

with rnw.open("my_file.txt", "wt") as f:
    for i in range(10):
        f.write(input())

copy

Copies the file first to a temporary file in the destinations directory before moving it to its final path.

import rename_after_writing as rnw

rnw.copy(src="machine/with/src", dst="other/machine/in/network/dst")

move

Some implementations of network-file-systems might raise an OSError with errno.EXDEV when an os.rename() is going across the boundary of a physical drive. In this case, this package’s copy is used to copy the file beore unlinking the source-file.

import rename_after_writing as rnw

rnw.move(src="machine/with/src", dst="other/machine/in/network/dst")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rename_after_writing-0.0.12.tar.gz (5.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rename_after_writing-0.0.12-py3-none-any.whl (5.5 kB view details)

Uploaded Python 3

File details

Details for the file rename_after_writing-0.0.12.tar.gz.

File metadata

  • Download URL: rename_after_writing-0.0.12.tar.gz
  • Upload date:
  • Size: 5.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.5

File hashes

Hashes for rename_after_writing-0.0.12.tar.gz
Algorithm Hash digest
SHA256 00fb8cd28bebf2962ec84088668dfc03f32af457e80080fc3062e32faeadaeec
MD5 089d781ec52b38d8e76e92ebed79a28f
BLAKE2b-256 cff413b0eb6b612bff9f9fc182c957c23d0b895b25fd6e6c2f50821ea5fbfb1a

See more details on using hashes here.

File details

Details for the file rename_after_writing-0.0.12-py3-none-any.whl.

File metadata

File hashes

Hashes for rename_after_writing-0.0.12-py3-none-any.whl
Algorithm Hash digest
SHA256 2dec5158a28578dbbc123e27c5eec87faed75e723a181968143518da3c50cae8
MD5 243beff4aab2c560dc2293efe9509a91
BLAKE2b-256 2075241993203521f9e9870fbe89ed5c99481234859cf5ca5ebeff43d3b89e97

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page