Core - Базовый сервисный класс
================================

.. currentmodule:: axioma.core

.. class:: Core

	Базовый сервисный класс. Используется тогда, когда нет необходимости использовать модули render или gui. \
	Например, когда необходимо открыть таблицу и прочитать из нее данные. В рамках одного отдельного проекта \
	достаточно проинициализировать один экземпляр данного класса. Перед вызовом :meth:`~axioma.core.Core.initialize` 
	должен быть создан объект приложения  :class:`~PyQt5.QtGui.QGuiApplication`
	
	
	.. code-block:: python
		:caption: Пример инициализации:

		import sys
		import axioma.core
		from PyQt5.QtGui import QGuiApplication

		a = QGuiApplication(sys.argv)
		core = axioma.core.Core()
		core.initialize()


	.. note:: Получить существующий экземпляр можно через глобальную переменную axioma.app.core

	

	От него наследуются: :class:`~axioma.render.Render`

		.. py:method:: Core(parent=None)

			Конструктор

			:param parent: Родительский объект
			:type parent: :class:`~PyQt5.QtCore.QObject` или :any:`None`

		.. method:: enableLoggingToConsole(enabled=True)

			Включить или выключить вывод лога в консоль

			:param enabled: желаемое состояние вывода; по умолчанию - `True`, т.е. осуществлять вывод
			:type enabled: :class:`bool`

		.. method:: dataProviders()

			Список загруженных провайдеров данных

			:return: загруженные провайдеры
			:rtype: :class:`list` [:class:`~axioma.core.dp.DataProvider`]

		.. py:method:: dataProviderById(id)

			Получение провайдера данных по его идентификатору

			:param  id: Текстовый идентификатор провайдера
			:type id: :class:`str`
			:return: Найденный провайдер или :any:`None`
			:rtype: :class:`~axioma.core.dp.DataProvider`

			.. code-block:: python

				# находим необходимый провайдер
				dp = axioma.app.core.dataProviderById("GdalDataProvider")
				if dp is not None:
					...

		.. py:method:: validDataDir()

			Получение каталога с ресурсами приложения

			:return: Каталог
			:rtype: :class:`~PyQt5.QtCore.QDir`

		.. method:: pluginManager

			Получить менеджер плагинов

			:return: менеджер плагинов
			:rtype: :class:`~axioma.core.plugin.PluginManager`

		.. method:: notificationManager

			Получить менеджер уведомлений

			:return: менеджер уведомлений
			:rtype: :class:`~axioma.core.NotificationManager`

		.. py:method:: appLocalDataLocation()

			Возвращает каталог с пользовательскими настройками

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

		.. method:: registerService(service, name)

			Регистрация сервиса ``service`` с именем ``name``. Все расширения, которые
			объявили зависимость от сервиса с таким именем будут оповещены о его
			регистрации.

			:param service: Объект сервиса
			:type service: :class:`~PyQt5.QtCore.QObject`
			:param name: Имя сервиса
			:type name: :class:`str`

		.. method:: registerService(service)

			Регистрация сервиса с именем соответствующим его типу. Аналогичен вызову
			
			.. code-block:: python

				registerService(service, service.metaObject().className())

		.. method:: getService(service_type, name=None)

			Получить сервис типа ``service_type``. Если ``name`` == None,
			будет использовано стандартное имя сервиса ``service.metaObject().className()``

			.. note::

				В момент вызова метода нет гарантии, что запрашиваемый сервис
				уже зарегистрирован в системе. Для того, чтобы получить сервис, как только он станет доступным,
				используйте механизм :ref:`Управления зависимостями <dependencies-label>`

			:param service_type: Тип класса сервиса
			:type service_type: тип класса, наследованный от :class:`~PyQt5.QtCore.QObject`
			:param name: Имя сервиса
			:type name: :class:`str`

			.. code-block:: python

				service = axioma.app.core.getService(axioma.core.plugin.PluginManager)

		.. py:method:: translationLanguage()

			Возвращает язык интерфейса приложения

			:return: Значение 'ru', 'en'
			:rtype: :class:`str`

		.. py:method:: prependExtension(ext)

			Регистрация нового, ранее созданного, расширения в системе

			:param ext: Расширение
			:type ext: :class:`~axioma.core.plugin.Extension`

		.. py:method:: prependExtensions(exts)

			Регистрация списка расширений в системе

			:param exts: Расширения
			:type exts: :class:`list` [:class:`~axioma.core.plugin.Extension`]

		.. py:method:: settings()

			Постоянные настройки приложения

			:rtype: :class:`~axioma.core.SettingsManager`
