vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner
https://pypi.org/project/fstrans/

В основном ради того, чтобы научитсья пользоваться setuptools. Хотя сам модуль в общем вполне практически полезный. Для себя делал. Базовую идею я придумал еще во времена Communiware, где картинки хранились на диске, а текст в базе данных, и требовалось сделать чтобы картинкам можно было сделать rollback. Тогда соответствующий код, конечно же был на перле написан, а не на питоне.

Сейчас использую этот модуль для работы с репозиториями пакетов. Поэтому оно умеет не только коммиты-роллбэки но и сериализацию доступа к дереву файлов.

И таки да, test suite запускается штатными средствами setuptools. В distutis, когда я там делал поддержку запуска test suite для ctypsecrypto, все руками приходилось делать.

P.S. Надо бы найти время и переписать setup от ctypsecrypto на setuptools, а заодно окончательно починить там работу с бинарными данными в 3-м питоне.

Date: 2019-10-21 12:41 pm (UTC)
avnik: (Default)
From: [personal profile] avnik
Я бы еще посмотрел на:
- atomicwrites (если просто надо безопасно писать файлы (чужие конфиги, итд) + там все ок с портабельностью, виндой и osx);
- repoze.filesafe если надо дружить с транзакциями модных веб движков (flask, pyramid) и хочется привязать коммит обновления файла к коммиту транзакции в постгресс к примеру; (он древний конечно, возможно уже есть что-то новое более прямое и портабельное)
- click если просто пишется какая-то мелкая утилита (там прямо при объявлении параметра командной строки можно указать что это не строка, а файл, который обязан (не)существовать, и там же можно сказать "хочу атомарного обновления по завершении утилиты")

Date: 2019-10-21 03:52 pm (UTC)
avnik: (Default)
From: [personal profile] avnik
1 я не понимаю -- как ты будешь откатывать базу, если FS выкинула ошибку. (если там к примеру база)
2 с внешними тут все плохо будет, я боюсь тут только снапшотами FS можно сделать действительно атомарно (потому что копирование дерева взад-вперед будет расти по времени геометрически)
(ну либо строить рядом новое поколение, и обновлять симлинки, как советовал оратор в соседней ветке -- в nix атомарные апдейты кстати сделано ровно так)

> А вот модных движков как раз не надо. Репозитории пакетов обычно раздаются статикой.

Ну в посте библиотека позиционировалась как обобщенное, а не частное решение.
(transaction я считаю годной библиотекой, и хорошим обобщением двухфазного коммита с голосованием.

(А если надобудет к этому вебморду -- будешь велосипед изобретать?)

> Ну и винда и osx не нужны абсолютно.

Я с одной стороны согласен, с другой я не вижу зла в том, чтобы не создавать несовместимость нарочно.

Date: 2019-10-21 09:37 pm (UTC)
avnik: (Default)
From: [personal profile] avnik
Жаль что не осталось других аргументов.

непонятно

Date: 2019-10-21 01:29 pm (UTC)
From: [identity profile] figador.livejournal.com
1. "чтобы картинкам можно было сделать rollback." -- это значит, чтобы можно было восстановить
предыдущю версию картинки? Но ведь для этого есть обычные backup-утилитки. Наверняка вы нечто большее замышляли, или более удобное...
2. Что значит "сериализация доступа к дереву файлов"? ИМХО, если двое одновременно пишут один и тот же файл, то в любом случае быть беде. Или не обязательно? В чём идея?
yurikhan: (Default)
From: [personal profile] yurikhan

Есть лёгкое подозрение, что в строке 36 может выпадать слэш, если аргумент old указан с концевым слэшем, а new без оного. Раз copy_tree выставлена как публичная функция, такой вариант вызова нельзя исключать.

В библиотеке общего назначения вывод в stdout (L122, L126) неуместен.

В чём преимущество select с таймаутом в L129 против time.sleep? В том, что при интерактивном выполнении прерывается по нажатию на клавишу?

Двухшаговое переименование в __exit__ оставляет окно для гонок, когда старый каталог уже уехал, а новый ещё не приехал. Более надёжно такие вещи делаются, если допустимо исходную постановку задачи «у нас есть каталог» поменять на «у нас есть симлинк на каталог». Тогда:

  1. создаётся глубокий клон каталога из-под исходного симлинка (с хардлинками внутри);
  2. в нём делаются необходимые изменения (с разбитием хардлинков перед тем или вместе с тем, как менять файлы);
  3. создаётся временный симлинк на новый каталог;
  4. временный симлинк атомарно переименовывается поверх исходного.

Рекурсивное удаление в L157-162 можно сократить до shutil.rmtree, если не мешают требования обратной совместимости.

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

June 2025

S M T W T F S
1 23 4 567
891011121314
15161718192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 5th, 2025 09:54 pm
Powered by Dreamwidth Studios