Example #1
0
    def build(self, request, rules):
        u'''
        Выполняет заполнение собственных атрибутов
        согласно переданному запросу, исходя из списка правил

        :param request:запрос, на основе которого производится
            заполнение контекста
        :type reques: django.http.Request

        :param rules: правила извлечения контекста из запроса
        :type rules: список m3_core.actions.context.ActionContextDeclaration
        '''

        params = {}
        if rules:
            for rule in rules:
                # [тип параметра; признак того, что параметр включен в context]
                params[rule.name] = [rule.type, False]

        key = value = ptype = None
        try:
            # переносим параметры в контекст из запроса
            for key in request.REQUEST:
                value = request.REQUEST[key]
                # Пустые параметры не конвертируем,
                # т.к. они могут вызвать ошибку
                if not value:
                    continue

                if key in params:
                    ptype = params[key][0]
                    value = self.convert_value(value, ptype)
                    # Флаг того, что параметр успешно расшифрован
                    # и добавлен в контекст
                    params[key][1] = True
                setattr(self, key, value)
        except IOError as err:
            # В некоторых браузерах (предполагается что в ie)
            # происходит следующие:
            # request.REQUEST читается и в какой-то момент связь прекращается
            # из-за того, что браузер разрывает соединение,
            # в следствии этого происходит ошибка
            # IOError: request data read error
            logger.warning(str(err))
        except ValueError as err:
            # если ошибка преобразования,
            # то пусть проставится значение по-умолчанию
            logger.exception(
                u'Ошибка при преобразовании значения '
                u'из запроса %s="%s" к типу "%s"'
                % (key, value, ptype)
            )

        # переносим обязательные параметры, которые не встретились в запросе
        for rule in rules if rules else []:
            if rule.required and rule.default is not _none and (
                    not params[rule.name][1]):
                # если параметр не передан в запросе, но
                # он является обязательным и задано значение по умолчанию,
                # то помещаем этот параметр в контекст
                setattr(self, rule.name, rule.default)
        # проверяем наличие обязательных параметров
        self.check_required(rules)
Example #2
0
    ActionPack, Action, PreJsonResult, OperationResult, ACD
)
from m3_ext.ui.windows.complex import ExtDictionaryWindow
from m3_ext.ui.misc.store import ExtJsonStore
from m3_ext.ui.containers import ExtPagingBar
from m3_ext.ui.results import ExtUIScriptResult
from m3.actions import utils
from m3.actions.results import ActionResult
from m3.db import BaseObjectModel, safe_delete
from m3 import RelatedError

try:
    from m3_audit import AuditManager
except ImportError:
    # При сборке документации, внешняя Django ничего не знает про m3_audit
    logger.warning('m3_audit import error')

from m3.actions.interfaces import ISelectablePack

MSG_DOESNOTEXISTS = (
    u'Запись справочника с id=%s не найдена в базе данных.<br/>'
    u'Возможно, она была удалена. Пожалуйста, обновите таблицу.'
)


class ObjectNotFound(Exception):
    """
    Исключение для виртуальных справочников. Аналог DoesNotExists у моделей.
    """
    pass
Example #3
0
    logger = getLogger('django')

from m3.actions import Action, ACD
from m3.actions.results import ActionResult

# !!!!!
# для работы данного модуля необходимо наличие приложения 'm3_mutex'
# в INSTALLED_APPS приложения

# TODO: переделать по правильному - платформа не должна импортировать
# модули контрибов

if not 'm3_mutex' in settings.INSTALLED_APPS:
    # При сборке документации внешняя Django ничего не знает про m3_mutex
    logger.warning(
        u'For working async operations "m3_mutex" '
        u'must be define in INSTALLED_APPS')
    # raise ImportError(
    # u'For working async operations "m3_mutex" must'
    # ' be define in INSTALLED_APPS')

try:
    from m3_mutex import (
        capture_mutex, release_mutex, request_mutex,
        MutexID, MutexOwner, MutexBusy, MutexState, TimeoutAutoRelease)
except ImportError:
    logger.warning(u'm3_mutex import error')


class IBackgroundWorker(Thread):
    '''