# Schema - Схема таблицы

class axipy.Schema

  Базовые классы: `list`

  Схема таблицы. Представляет собой список атрибутов `axipy.Attribute`. Организован в виде `list` и свойством coordsystem. При задании coordsystem создается геометрический атрибут.

  Пример создания

      # Определяем схему таблицы
      schema = Schema(
          Attribute.string('one', 25),
          Attribute.integer('two'),
          Attribute.decimal('three'),
          coordsystem='prj:Earth Projection 12, 62, "m", 0'
      )
      # На базе этой схемы можно создать таблицу
      definition = {
          'src': '',
          'schema': schema
      }
      table = provider_manager.create(definition)

  Пример создания из списка

      attrs = [Attribute.string('one', 25), Attribute.integer(
          'two'), Attribute.decimal('three')]
      # распаковывается список атрибутов
      schema = Schema(*attrs, coordsystem='prj:Earth Projection 12, 62, "m", 0')

  Имеет стандартные функции работы со списком.

  Пример операций

      # Вставка атрибута на 2 позицию
      schema.insert(2, Attribute.string('attr_name'))
      # Количество атрибутов
      count = len(schema)
      # Получение атрибута по индексу
      attribute = schema[2]
      # Получение атрибута по имени
      attribute = schema['attr_name']
      # Изменение атрибута по индексу
      schema[2] = Attribute.string('attr', 30)
      # Изменение атрибута по имени
      schema['name_attribute'] = Attribute.string('attr', 30)
      # Удаление атрибута по его индексу
      del schema[2]
      # Аналогичная команда удаления атрибута
      schema.delete(2)
      # Удаление атрибута по имени
      schema.delete('Население')
      # Добавление атрибута в конец
      schema.append(Attribute.string('new_attr'))
      # Вставка по индексу
      schema.insert(2, Attribute.integer('num_attr'))
      # Поиск атрибута по имени
      index = schema.index('new_attr')
      # проверяет существование
      exists = 'new_attr' in schema
      # Удаление по имени
      schema.remove('new_attr')
      # Получение атрибута по его имени
      a = schema.by_name('attr')

  См.также

  Изменение структуры существующей таблицы см. `Table.schema`

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

  `__init__`(*attributes[, coordsystem]) | Конструктор класса.

  Свойства:

  `attribute_names` | Возвращает список имен атрибутов.
  `coordsystem` | Устанавливает или возвращает систему координат.

  Методы:

  `by_name`(n) | Возвращает атрибут по его имени.
  `delete`(index) | Удаляет атрибут.
  `index_by_name`(n) | Возвращает индекс по имени атрибута.
  `insert`(index, attr) | Вставляет атрибут.

  Специальные методы:

  `__contains__`(name) | Проверяет наличие элемента в объекте (оператор `in`).
  `__getitem__`(index) | Доступ к элементу по индексу (`obj[i]`).
  `__len__`() | Длина объекта (функция `len()`).
  `__repr__`() | Официальное строковое представление объекта при вызове `repr()`.
  `__setitem__`(index, value) | Установка элемента по индексу (`obj[i] = value`).

  __contains__(name: object) → bool

    Проверяет наличие элемента в объекте (оператор `in`).

  __getitem__(index: int) → Attribute

    Доступ к элементу по индексу (`obj[i]`).

  __init__(*attributes: Attribute, coordsystem: Optional[CoordSystem] = None)

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

    Параметры:

      - *attributes – Атрибуты.

      - coordsystem – Система координат для геометрического атрибута.

  __len__() → int

    Длина объекта (функция `len()`).

  __repr__() → str

    Официальное строковое представление объекта при вызове `repr()`.

  __setitem__(index: int, value: Attribute)

    Установка элемента по индексу (`obj[i] = value`).

  property attribute_names: List[str]

    Возвращает список имен атрибутов.

  by_name(n: str) → Optional[Attribute]

    Возвращает атрибут по его имени. Если такого имени не существует, возвращает None.

    Параметры:

      n – Наименование атрибута.

  property coordsystem: Optional[CoordSystem]

    Устанавливает или возвращает систему координат.

    Результат:

      None, если СК отсутствует.

    См.также

    `axipy.Table.is_spatial`

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

        if schema.coordsystem is not None:  # проверяет существование
            pass
        crs_string = schema.coordsystem  # получает
        schema.coordsystem = 'epsg:4326'  # изменяет
        schema.coordsystem = None  # удаляет

  delete(index: Union[int, str])

    Удаляет атрибут.

    Параметры:

      index – Индекс удаляемого атрибута.

  index_by_name(n: str) → int

    Возвращает индекс по имени атрибута.

    Параметры:

      n – Наименование атрибута.

  insert(index: int, attr: Attribute)

    Вставляет атрибут.

    Параметры:

      - index – Индекс, по которому производится вставка.

      - attr – Атрибут.