DataSource - Абстрактный источник данных
===============================================

.. currentmodule:: axioma.core.dp

.. class:: DataSource

	Абстрактный источник данных. Этот класс предоставляет интерфейс для работы с отдельным источником данных, например, файлом, базой данных, веб-службой, и так далее.
	
	От него наследуются: :class:`DatabaseSource`

		..	.. method:: DataSource(provider)
		..
		..		Конструктор класса
		..
		..		:param provider: Провайдер источника данных
		..		:type provider: :class:`~axioma.core.dp.DataProvider`

		.. method:: dataSourceId()
		
			Идентификатор источника данных
			
			:return: уникальный номер для каждого открытого источника данных
		
		.. method:: dataSourceDefinition()

			Эта функция предоставляет доступ к описанию источника данных

			:return: описание источника данных
			:rtype: :class:`~axioma.core.dp.DataSourceDefinition`

		.. method:: accessMode()

			Режим доступа к источнику данных

			:return: только на чтение, или на чтение и запись
			:rtype: :class:`~axioma.core.dp.AccessMode`

					.. py:method:: openDataObject(dataObjectDef)

			Производится открытие объекта данных по его описанию. Для открытия источников данных лучше воспользоваться функцией :meth:`~axioma.core.open_json`

			:param dataObjectDef: Описание объекта данных для открытия
			:type dataObjectDef: :class:`~axioma.core.dp.DataObjectDefinition`
			:rtype: :class:`~axioma.core.dp.DataObject`
			
			Пример открытия таблицы с именем world:

			.. code-block:: python

				objDef = NamedObjectDefinition("world")
				table = ds.openDataObject(objDef)

		.. py:method:: contents()

			Выдает перечень таблиц, которые доступны для открытия в рамках данного источника данных

			:rtype: :class:`list` [:class:`~axioma.core.dp.DataObjectDefinition`]

			.. code-block:: python

				ds = dataProvider.openDataSource(dbDef)
				if ds is not None:
					for ci in ds.contents(): # Перечень таблиц в источнике данных
						print("Таблица {}".format(ci.name())) # Печатает наменование таблицы

		.. method:: provider()

			Эта функция предоставляет доступ к провайдеру, создавшему этот источник данных

			:return: провайдер, создавший этот источник данных
			:rtype: :class:`~axioma.core.dp.DataProvider`

		.. py:method:: canRemoveEmpty()

			Функция необходима для определения, будет ли ли удаляться источник данных из каталога, если был удален последний объект данных из этого источника.

			:return: True, если да. В противном случае False
			:rtype: :class:`bool`
			
		.. py:method:: createDataObject(name, spec)

			Создание объекта данных на базе его описания. 

			:param name: Наименование объекта. Создание невозможно, если объект с таким именем уже существует.
			:type name: :class:`str`
			:param spec: Параметры спецификации (схемы таблицы). Подробнее описаны в :meth:`~axioma.core.create_from_json`
			:type spec: :class:`~PyQt5.QtCore.QJsonObject`
			:rtype: :class:`~axioma.core.dp.DataObject`
