TransactionalTable - Интерфейс транзакционной таблицы
=====================================================

.. currentmodule:: axioma.core.dp

.. class:: TransactionalTable

	.. note:: Абстрактный

	Абстрактный класс, представляющий транзакционную таблицу. Из редактируемой таблицы :class:`~axioma.core.dp.EditableTable` можно получить транзакционную,\
	используя функцию :func:`~axioma.core.dp.wrap`.
	Если для открытия использовать метод :func:`axioma.core.open_json`, то в случае, если есть возможность редактирования таблицы, внутренняя \
	транзакционная таблица создается по умолчанию.
	Если транзакционная таблица создана, все изменения таблицы (вставка/изменение/удаление) производятся в нее. После вызова метода \
	:meth:`~axioma.core.dp.HasFeatureHistory.commit` изменения сохраняются в основной таблице.


	Унаследован от:

	* :class:`~axioma.core.dp.EditableTable`
	* :class:`~axioma.core.dp.HasFeatureHistory`

	Методы:

		.. method:: commit()

			Внести все изменения в таблицу. При этом все изменения из файла транзакции сохранятся в основной таблице.

		.. method:: restore()

			Отменить все изменения таблицы. Производится очистка файла транзакций.

		.. method:: setAutoCommit()

			Устанавливает режим автоматического подтверждения изменений при закрытии таблицы без явного подтверждения (:meth:`axioma.core.dp.HasFeatureHistory.commit`) или отказа (:meth:`axioma.core.dp.HasFeatureHistory.restore`)

		.. method:: setAutoRollback()

			Устанавливает режим автоматического отказа от изменений при закрытии таблицы (используется по умолчанию)

		.. method:: useAutoRollback()

			Возвращает признак автоматического отказа от изменений при закрытии таблицы

			:return: True, если используется автоматическая отмена изменений (по умолчанию), и False, если используется автоматическое сохранение изменений
			:rtype: :class:`bool`

Функции:
	
.. function:: wrap(edit_table)

	Обернуть редактируемую таблицу в транзакционную. Файл транзакции
	будет создан, если это возможно, в директории с данными редактируемой таблицы,
	иначе будет создан :any:`временный файл <PyQt5.QtCore.QTemporaryFile>`.

	:param edit_table: редактируемая таблица
	:type edit_table: :class:`~axioma.core.dp.EditableTable`

.. function:: wrap(edit_table, file_path)

	Обернуть редактируемую таблицу в транзакционную

	:param edit_table: редактируемая таблица
	:type edit_table: :class:`~axioma.core.dp.EditableTable`
	:param file_path: путь к файлу транзакции, который будет создан
	:type file_path: :class:`str`
	
.. function:: recoverHistory(edit_table, file_path)

	Восстановление файла транзакций после аварийного завершения программы. Если в процессе редактирования возникла ситуация, при которой внесенные изменения не были сохранены в таблице, то после открытия этой таблицы можно явно попытаться восстановить потерянные данные.

	:param edit_table: редактируемая таблица
	:type edit_table: :class:`~axioma.core.dp.EditableTable`
	:param file_path: наименование таблицы на основе которого формируется наименование файла транзакций, из которого будет произведена попытка восстановления
	:type file_path: :class:`str`
	:return: Успешность выполнения операции. Если восстановление произведено, возвращается True.
	:rtype: :class:`bool`

.. function:: recoverHistory(edit_table)

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

	:param edit_table: редактируемая таблица
	:type edit_table: :class:`~axioma.core.dp.EditableTable`
	:return: Успешность выполнения операции. Если восстановление произведено, возвращается True.
	:rtype: :class:`bool`

Пример использования:

.. literalinclude:: ../../../../../../examples/edit_table_json.py
	:language: python
	:linenos:
