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()