AttributeDefinition - Абстрактное описание атрибута
========================================================

.. currentmodule:: axioma.core.dp

.. class:: AttributeDefinition

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

	Абстрактное описание атрибута
	
	От него наследуются:
	
	* :class:`~axioma.core.dp.SimpleAttributeDefinitionInterface`
	* :class:`~axioma.core.dp.GeometryAttributeDefinitionInterface`
	* :class:`~axioma.core.dp.RenditionAttributeDefinition`

		.. method:: id()

			Идентификатор данного конкретного атрибута, который не меняется в течение жизни объекта

		.. py:method:: toJson()

			Описание атрибута в формате JSON

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

		.. method:: copyId(attr)

			Присвоить идентификатор другого атрибута

			:param attr: другой атрибут
			:type attr: :class:`~axioma.core.dp.AttributeDefinition`
			
		.. method:: newId()
        
			Сгенерировать новый идентификатор

		.. method:: displayClassName()

			Имя класса атрибута человеческими буквами: "простой", "геометрия", "стиль", и т.д

			:rtype: :class:`str`

		.. method:: displayDescription()

			Описание внутреннего состояния атрибута

			:rtype: :class:`str`

		.. method:: name()

			Имя атрибута

			:rtype: :class:`str`

		.. method:: setName(name)

			Задать имя атрибута

			:param name: новое имя
			:type name: :class:`str`
			:return: true, если изменение имени прошло успешно
			:rtype: :class:`bool`

		.. method:: type()

			Тип данных атрибута

			:rtype: :class:`PyQt5.QtCore.QMetaType`.Type

		.. py:method:: alias()

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

			:rtype: :class:`str`

		.. py:method:: setAlias(alias)

			Установка псевдонима поля.

			:param alias: псевдоним поля
			:type alias: :class:`str`

		.. method:: getNormalizedValue(value)
        
			Пытается преобразовать значение value к типу данного атрибута
            
			:return: пара (value, result), где value - преобразованное значение, а result сообщает об уровне потери точности
			:rtype: (QVariant, :class:`NormalizeResult`)

		.. method:: normalizeValue(value, acceptableError = Norm_CouldNotConvert)

			Выполняет преобразование значения value к типу данного атрибута. 
			В случае, если уровень потери точности в ходе преобразования превысил acceptableError, бросается исключение LogicError.

			:param value: заданное значение
			:param acceptableError: какой уровень ошибки допускается
			:type acceptableError: :class:`NormalizeResult`
			:return: преобразованное значение

		.. class:: NormalizeResult

			Статус проведения нормализации

			.. csv-table::
				:header: Наименование, Значение, Описание, Примеры преобразования

				``Norm_DirectUsage``, 0, "Значение используется как есть, без преобразования", "Integer -> Integer; String -> String; ..."
				``Norm_LosslessConversion``, 1, "Преобразование без потери точности", "Integer -> String; WKB -> Geometry; ..."
				``Norm_MinorValueChange``, 2, "Преобразование с несущественной потерей точности", "Округление числа, например 3.1415 -> 3.14"
				``Norm_MajorValueChange``, 3, "Преобразование с существенной потерей точности", "Переполнение числа, если схема не позволяет записывать числа нужной длины, например 12345 [Decimal(5)] → 999 [Decimal(3)]"
				``Norm_CouldNotConvert``, 4, "Невозможно выполнить преобразование", "Несовместимые данные. В результате преобразования получается значение None" 

Пример см. :class:`~axioma.core.dp.TableSchema`
