======================================================
Проект: Универсальный конфигуратор 
Модуль: Application/Дока Автор: Андрей
Орлов Версия: ${Id: }
------------------------------------------------------
Дата:   Mon Nov 19 21:09:12 MSK 2001
======================================================


Про класс Application я кой-чего напишу. Это прототип обобщенного
приложения, выполняющий следющие операции:

    1. Загрузка конфига

    2. Инициализация приложения

    3. Выполнение команд

    4. Откат инициализации

    5. Завершение.

Любое приложение должно содержать класс, порождаемый от Application. Вызов
приложения осуществляется методом run(), т.е.

    sys.exit(Application(cfg={}).run()) - это стандартная конструкция.

Application может работать в двух режимах: обычном и отладочном. Отладочный
режим включается ключом --debug=1. Основное отличие отладочного и основного
режима - в основном режиме все исключения перехватываются и маскируются. В
отладочном - нет.

Программирование Application заключается в порождении от него объекта и
перекрытия специальных слотов. Каждый слот должен возвращать ненулевое
значение, иначе будет считаться что слот завершился неудачно и из программы
будет произведен безопасный выход. Основной интерес на сегодня представляют
следующие слоты:

    init        -- Инициализация. Выполяется поверх уже разобранного конфига.

    main        -- Основная вызываемая функция. Существует несколько стандартных
        прототипов, в т.ч. execute_cmd & execute_seq.

    execute_seq -- Пытается выполнить параметры командной строки как
        команды, вызывая функции вида arg_<ИМЯ_КОМАНДЫ> без аргументов

    execute_cmd -- Пытается выполнить первый параметр командной строки как
        команду, вызывая функцию вида arg_<ИМЯ_КОМАНДЫ> передавая ей в
        качестве аргментов остальные параметры командной строки.

    finit       -- Завершение. Предназначен для выполнения завершающих действий,
        в т.ч. закрытия файлов, сохранение промежуточных данных и т.п. 
        Вызывается даже при аварийном завершении метода main

Класс Application предоставляет ряд функций, в том числе специальные
функции, для вывода сообщений::

    verbose(<ФОРМАТ>[,<УРОВЕНЬ>[,<АРГУМЕНТЫ>]])         - трассировка

    warning(<ФОРМАТ>[,<УРОВЕНЬ>[,<АРГУМЕНТЫ>]])         - предупреждение

    fatal(<ФОРМАТ>[,<УРОВЕНЬ>[,<ОШИБКА>][,<АРГУМЕНТЫ>]])        фатальное
    завершение

Все это - сообщения об ошибках. У них у всех есть уровень - т.е. тот уровень
при котором сообщение будет выведено. Для построения стандартного приложения
они обязательно должны использоваться. Рекомендуемая степень детализации и
смысл каждого уровня следующий:
 
    0 - Безмолвие.

    1 - Основные стадии, старт, завершение, инициализация коннекторов, и
        т.п.

    2 - Обнаружение необычных условий

    3 - Начало иттераций внутри стадий

    4 - Каждая иттерация (начало конец или середина, на усмотрение)

    5 - Начало библиотечногой вызова

    10+ - отладка.
 
Уровни 0-1-2-3 должны быть заполнены всегда.

Уровень четыре должен заполнятся для длительных иттеративных процедур.

Уровень пять должен запонятся для критчиных вызовов с негарантированным
успехом (например system или popen).

Уровнеи больше 10ти в релизе по возможности должны оставаться пустыми.
