This release is a pre-release and may not be stable for production use.
🚀 Atomik
Atomik provides you a python-friendly way to manage writing new file and folders in an atomic way.
The main way to use the library is with to use the file and folder context manager. They will provide
an easy interface to make sure the destination file/folder remain consistent.
This means you can be sure that you will not leave a file half written or a folder with half the files you wanted to write into in case of failure. When overwriting you can be sure that the data will be either the previous or the next version.
📚 Example
File
This will ensure either all the data is correctly written to file or none of it
with atomik.file("./result.json") as f:
print(stream, file=f)
Folder
with atomik.folder("./result_folder") as dir:
with open(Path(dir, "result_1.json") as f:
print(result_1, file=f)
with open(Path(dir, "result_2.json") as f:
print(result_2, file=f)
🔐 Safe default
By default, atomik will not overwrite files/folders (but it's configurable)
🤓 How ?
Atomik uses the new renameat2 syscall to allow to rename file in an atomic way.
The syscall doesn't allow to overwrite a non-empty folder when renaming.
This is achieved using the exchange flag to swap the two folder and then the source
folder is cleaned. This may leave the src folder in case of interruption/issue when deleting
but the destination folder will still be written in an atomic way.
Limitations
The rename syscall only work if the source and destination are on the same filesystem
Acknowledgement
This library's main goal is to provide a simple interface to rename file in a safe and simple way, without having to dive deep into OS specific documentation and limitations behind it. If you want to use the syscall directly I recommend these two libraries which helped the development of Atomik a lot:
Metadata
Release files for atomik 0.0.3rc1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| atomik-0.0.3rc1.tar.gz | 8.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| atomik-0.0.3rc1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 14.4 kB
Release files / atomik-0.0.3rc1.tar.gz
| Download URL | atomik-0.0.3rc1.tar.gz |
|---|---|
| Size | 8.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
53dad91ecb8d0fcb22512a7134ef70c5993663a986eb6349496df188a336a112
|
|
BLAKE2b-256 checksum How to use checksums |
7ca5978ad38755fc762e8cb3704def88a5855dea6e93206cfbfa143c196c777c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.0.0 CPython/3.12.3
|
Release files / atomik-0.0.3rc1-py3-none-any.whl
| Download URL | atomik-0.0.3rc1-py3-none-any.whl |
|---|---|
| Size | 6.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
abee8b36bc9331bb4d903389fca620617f3eb94878fd832433871b9ebcba3e45
|
|
BLAKE2b-256 checksum How to use checksums |
f2e98f3239d10467febfa520ed6dab860112681a02b2bde79895c52d2c80e4f6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.0.0 CPython/3.12.3
|