HistorySnapshot - Образ изменений в таблице

class axioma.core.dp.HistorySnapshot

Образ изменений в таблице. Используется редактируемой таблицей EditableTable

Методы:

HistorySnapshot(comparator)

Конструктор класса

Параметры

comparator (VariantComparator) – функтор сравнения

clear()

удалить все изменения

idComparator()
Результат

компаратор идентификаторов

Тип результата

VariantComparator

inserted()

Список записей, которые были добавлены

Результат

список добавленных записей

Тип результата

list [Feature]

insertedFeatureSequence(range=PageRange())

Получить итератор по записям, которые были добавлены

Параметры

range (PageRange) – диапазон записей

Результат

итератор по добавленным записям

Тип результата

Cursor

isEmpty()
Результат

является ли пустым

Тип результата

bool

newfoundIds()

Список обновленных записей

Результат

добавленные записи

Тип результата

list [QVariant]

numGoneFeatures()
Результат

количество записей для удаления

Тип результата

int

numInsertedFeatures()
Результат

количество записей для добавления

Тип результата

int

numNewfoundIds()
Результат

количество записей для обновления

Тип результата

int

storeGoneFeature(id)

Поместить идентификатор записи для удаления

Параметры

id (QVariant) – идентификатор записи для удаления

storeNewfoundFeature(feature)

Поместить в таблицу запись для добавления

Параметры

feature (Feature) – запись для добавления

storeUpdatedFeature(feature)

Поместить в таблицу запись для обновления

Параметры

feature (Feature) – запись для обновления

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
from axioma.core.dp import *
from axioma.cs import *
from axioma.core.geometry import *
from axioma.render import *
from axioma.mapinfo import *
from axioma.common import RuntimeException

from PyQt5.QtCore import *
from PyQt5.QtGui import *

'''
Пример вставки объекта в таблицу и сохранение информации об изменениях.
Здесь используется внешний файл транзакций.
'''

# Открываем таблицу
table = axioma.core.open_json({'src': '/tmp/world.tab'})
if table is None:
    raise RuntimeException("Таблица не открыта")
assert(isinstance(table, EditableTable))

# Создаем файл транзакций
history_snapshot = HistorySnapshot(table.featureIdComparator())

# Делаем выборку из двух записей
features = table.selectToFeatureList(QuerySelectAll(table.tableSchema().attributeNames()), PageRange(0, 2))

# Определяем индексы изменяемых полей
index_geometry = table.tableSchema().geometryIndex()
index_style = table.tableSchema().styleIndex()
index_country = table.tableSchema().indexOf('Country')

# Список атрибутов можно получить
# print (table.tableSchema().attributeNames())

# Вставка
new_feature =  Feature.createFeature(table.tableSchema())
# Устанавливаем геометрию по индексу поля
poly = QPolygonF();
v = 1000000
poly << QPointF(-v, -v) << QPointF(-v, v) << QPointF(v, v) << QPointF(v, -v) << QPointF(-v, -v)
polygon = Polygon(table.coordSystem(), poly)
new_feature.setAttribute(index_geometry, polygon)
new_feature.setModified(index_geometry, True)
# Устанавливаем стиль
style = MapBasicStyle().styleFromString('Pen (1,2,0) Brush (2, 65280, 16777215)')
new_feature.setAttribute(index_style, style)
new_feature.setModified(index_style, True)
# Строковае поле по его имени
new_feature.setAttribute('Country', 'New Country')
new_feature.setModified('Country', True)
# Сохраняем в файле транзакций
history_snapshot.storeNewfoundFeature(new_feature)

# Обновление
# Берем первую запись и обновляем для нее стиль оформления
if len(features) >= 1:
    feature = features[0]
    style_red = MapBasicStyle().styleFromString('Pen (1,2,0) Brush (2, 16711680, 16777215)')
    feature.setAttribute(index_style, style_red)
    feature.setModified(index_style, True)
    # Сохраняем в файле транзакций
    history_snapshot.storeUpdatedFeature(feature)

# Удаление
# Помечаем на удаление вторую выбранную запись
if len(features) >= 2:
    history_snapshot.storeGoneFeature(features[1].id())

# Сохраняем изменения из файла транзакций в таблице
table.save(history_snapshot)

Примечание

Для редактирования открытой таблицы лучшим решением будет создать для нее обертку TransactionalTable посредством метода open_json()