Feature - Интерфейс записи в таблице
========================================

.. currentmodule:: axioma.core.dp

.. class:: Feature

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

	Интерфейс записи в таблице

		..	.. method:: Feature(num_attributes, modified=False)
		..
		..		Конструктор класса
		..
		..		:param num_attributes: количество атрибутов
		..		:type num_attributes: :class:`int`
		..		:param modified: признак изменения
		..		:type modified: :class:`bool`

		.. staticmethod:: createFeature(schema)

			Фабричный статический метод для создания пустой записи

			:param schema: схема таблицы
			:type schema: :class:`~axioma.core.dp.TableSchema`
			:return: новая пустая запись
			:rtype: :class:`~axioma.core.dp.Feature`

		.. method:: numAttributes()

			Число атрибутов

			:rtype: :class:`int`

		.. method:: attributeNamesList()

			Список имен всех атрибутов

			:rtype: :class:`list` [:class:`str`]

		.. method:: geometryIndex()

			Получить индекс атрибута с геометрией. Если несколько - возвращает первый \
			по списку. Если геометрических атрибутов не найдено, возвращает -1. Метод аналогичен вызову :meth:`~axioma.core.dp.TableSchema.geometryIndex` у схемы.

			:rtype: :class:`int`

		.. method:: geometryIndexes()

			Получить список индексов всех геометрических атрибутов

			:rtype: :class:`list` [:class:`int`]

		.. method:: styleIndex()

			Получить индекс атрибута со стилем. Если несколько - возвращает первый \
			по списку. Если стилей не найдено, возвращает -1. Метод аналогичен вызову :meth:`~axioma.core.dp.TableSchema.styleIndex` у схемы.

			:rtype: :class:`int`

		.. method:: styleIndexes()

			Получить список индексов всех атрибутов со стилем

			:rtype: :class:`list` [:class:`int`]

		.. method:: id

			Идентификатор объекта в таблице

			:rtype: :class:`~PyQt5.QtCore.QVariant`

		.. method:: indexOf(name, case_sensitivity=CaseSensitive)

			Порядковый номер атрибута с именем ``name`` (начиная с 0)

			.. versionadded:: >1.2.2
				Параметр case_sensitivity=CaseSensitive

			:param name: имя атрибута
			:type name: :class:`str`
			:param case_sensitivity: чувствительность к регистру
			:type case_sensitivity: :class:`PyQt5.QtCore.Qt`
			:return: индекс атрибута
			:rtype: :class:`int`
			:raises Basic: :exc:`~axioma.common.BasicException` - если атрибут с заданными параметрами не найден

		.. method:: getAttribute(index)

			Получить атрибут с номером ``index``

			:param index: индекс атрибута
			:type index: :class:`int`
			:return: Значение атрибута с номером index
			:rtype: :class:`~PyQt5.QtCore.QVariant`
			:raises OutOfRange: :exc:`~axioma.common.OutOfRangeException` - если индекс выходит за пределы допустимых значений

		.. method:: getAttribute(name, case_sensitivity=CaseSensitive)

			Получить атрибут с именем ``name``

			.. versionadded:: >1.2.2
				Параметр case_sensitivity=CaseSensitive

			:param name: имя атрибута
			:type name: :class:`str`
			:param case_sensitivity: чувствительность к регистру
			:type case_sensitivity: :class:`PyQt5.QtCore.Qt`
			:return: Значение атрибута с именем name
			:rtype: :class:`~PyQt5.QtCore.QVariant`
			:raises Basic: :exc:`~axioma.common.BasicException` - если атрибут с заданными параметрами не найден

		.. method:: setAttribute(index, value)

			Установить атрибут с номером ``index`` в значение ``value``

			:param index: индекс атрибута
			:type index: :class:`int`
			:param value: значение
			:type value: :class:`~PyQt5.QtCore.QVariant`
			:raises OutOfRange: :exc:`~axioma.common.OutOfRangeException` - если индекс выходит за пределы допустимых значений

		.. method:: setGeoAttribute(index, value, transform)

			Установить геометрический атрибут с номером ``index`` в значение ``value`` и применить к нему указанную трансформацию ``transform``

			:param index: индекс атрибута
			:type index: :class:`int`
			:param value: значение
			:type value: :class:`~PyQt5.QtCore.QVariant`
			:param transform: объект преобразования геометрии
			:type transform: :class:`~axioma.core.geometry.Transform`
			:raises OutOfRange: :exc:`~axioma.common.OutOfRangeException` - если индекс выходит за пределы допустимых значений

		.. method:: setAttribute(name, value, case_sensitivity=CaseSensitive)

			Установить атрибут с именем ``name`` в значение ``value``

			.. versionadded:: >1.2.2
				Параметр case_sensitivity=CaseSensitive

			:param name: имя атрибута
			:type name: :class:`str`
			:param value: значение
			:type value: :class:`~PyQt5.QtCore.QVariant`
			:param case_sensitivity: чувствительность к регистру
			:type case_sensitivity: :class:`PyQt5.QtCore.Qt`
			:raises Basic: :exc:`~axioma.common.BasicException` - если атрибут с заданными параметрами не найден

		.. method:: tryGetAttribute(name, value)

			.. deprecated:: >1.2.2
				Используйте :meth:`~axioma.core.dp.Feature.getAttribute`

			Попытаться прочитать атрибут с именем ``name``

			:param name: имя атрибута
			:type name: :class:`str`
			:param value: переменная для получения результата
			:type value: :class:`~PyQt5.QtCore.QVariant`
			:return: True, если значение успешно прочитано, False, если атрибут с именем name не существует
			:rtype: :class:`bool`

		.. method:: trySetAttribute(name, value)

			.. deprecated:: >1.2.2
				Используйте :meth:`~axioma.core.dp.Feature.setAttribute`

			Попытаться записать значение ``value`` в атрибут с именем ``name``

			:param name: имя атрибута
			:type name: :class:`str`
			:param value: новое значение
			:type value: :class:`~PyQt5.QtCore.QVariant`
			:return: True, если значение успешно записано, False, если атрибут с именем name не существует
			:rtype: :class:`bool`

		.. method:: isModified(index)

			Проверить, установлен ли признак изменения для атрибута с номером ``index``. \
			Если индекс выходит за пределы значений, возвращает ``False``

			:param index: индекс атрибута
			:type index: :class:`int`
			:return: признак изменения атрибута
			:rtype: :class:`bool`

		.. method:: isModeified(name, case_sensitivity=CaseSensitive)

			Проверить, установлен ли признак изменения для атрибута с именем ``name``. \
			Если атрибут с заданными параметрами не найден, возвращает ``False``

			.. versionadded:: >1.2.2
				Параметр case_sensitivity=CaseSensitive

			:param name: имя атрибута
			:type name: :class:`str`
			:param case_sensitivity: чувствительность к регистру
			:type case_sensitivity: :class:`PyQt5.QtCore.Qt`
			:return: признак изменения атрибута
			:rtype: :class:`bool`

		.. method:: setModified(index, value=True)

			Установить или сбросить признак изменения для атрибута с номером ``index``

			:param index: индекс атрибута
			:type index: :class:`int`
			:param value: значение признака
			:type value: :class:`bool`
			:raises OutOfRange: :exc:`~axioma.common.OutOfRangeException` - если индекс выходит за пределы допустимых значений

		.. method:: setModified(name, value=True, case_sensitivity=CaseSensitive)

			Установить или сбросить признак изменения для атрибута с именем ``name``

			.. versionadded:: >1.2.2
				Параметр case_sensitivity=CaseSensitive

			:param name: имя атрибута
			:type name: :class:`str`
			:param value: значение признака
			:type value: :class:`bool`
			:param case_sensitivity: чувствительность к регистру
			:type case_sensitivity: :class:`PyQt5.QtCore.Qt`
			:raises Basic: :exc:`~axioma.common.BasicException` - если атрибут с заданными параметрами не найден

		.. method:: modifiedStatus()

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

			:rtype: :class:`~PyQt5.QtCore.QBitArray`

		.. method:: setAllModified(value)

			Установить или сбросить признаки изменения для всех атрибутов в значение ``value``

			:param value: значение
			:type value: :class:`bool`

		.. method:: saveModificationsFromOther(feature)

			Сохранить изменения из другой записи в текущую

			:param feature: другая запись
			:type feature: :class:`~axioma.core.dp.Feature`

		.. method:: name(index)

			Получить имя атрибута

			:param index: индекс атрибута объекта
			:type index: :class:`int`
			:return: имя атрибута по индексу из схемы объекта
			:rtype: :class:`str`
			:raises OutOfRange: :exc:`~axioma.common.OutOfRangeException` - если индекс выходит за пределы допустимых значений

		..	.. method:: exportValues(output_archive, attributes=list())
		..
		..		!!!
		..
		..		:param: !!!
		..		:return: !!!
		..		:rtype: !!!
		..
		..	.. method:: importValues(input_archive)
		..
		..		!!!
		..
		..		:param: !!!
		..		:return: !!!
		..		:rtype: !!!

		.. method:: valuesToBinary(attributes=list())

			Значения в виде массива байтов для заданного списка атрибутов

			:param attributes: список атрибутов, по умолчанию - получить все атрибуты
			:type attributes: :class:`list` [:class:`str`]
			:return: значения записи у заданных атрибутов
			:rtype: :class:`~PyQt5.QtCore.QByteArray`

		.. method:: valuesToText(attributes=list())

			Значения в виде строки для заданного списка атрибутов

			:param attributes: список атрибутов, по умолчанию - получить все атрибуты
			:type attributes: :class:`list` [:class:`str`]
			:return: строка значений
			:rtype: :class:`str`

		.. method:: setValuesFromBinary(bytes)

			Установить значения из массива байтов

			:param bytes: значения в виде массива байтов
			:type bytes: :class:`~PyQt5.QtCore.QByteArray`

		.. method:: setValuesFromText(text)

			Установить значения из стоки

			:param text: значения в виде строки
			:type text: :class:`str`

		.. method:: isEmpty()

			Если все атрибуты пустые, возвращает ``True``, если хотя бы один атрибут не пустой, возвращает ``False``

			:rtype: :class:`bool`

		.. method:: schema()

			Схема таблицы, которой принадлежит запись

			:rtype: :class:`~axioma.core.dp.TableSchema`

		.. method:: copyResetId(requested_schema, new_id)

			Создать копию записи со заданным идентификатором

			:param requested_schema: схема таблицы, с которой будет ассоциирована запись
			:type requested_schema: :class:`~axioma.core.dp.ModifiedTableSchema`
			:param new_id: новый идентификатор
			:type new_id: :class:`~PyQt5.QtCore.QVariant`
			:return: новая запись
			:rtype: :class:`~axioma.core.dp.Feature`

		.. method:: copy(requested_schema)

			Создать записи таблицы с идентификатором по умолчанию

			:param requested_schema: схема таблицы, с которой будет ассоциирована запись
			:type requested_schema: :class:`~axioma.core.dp.ModifiedTableSchema`
			:return: новая запись
			:rtype: :class:`~axioma.core.dp.Feature`

		.. method:: remap(requested_schema)

			Копирование записи и ассоциация ее со модифицированной схемой таблицы, созданной на основе заданной схемы таблицы

			:param requested_schema: схема таблицы
			:type requested_schema: :class:`~axioma.core.dp.TableSchema`
			:return: новая запись
			:rtype: :class:`~axioma.core.dp.Feature`
