def default_exception_func(e): if isinstance(e, LoginRequired): return api_result(*LOGIN_AUTH_FAIL), 200 if isinstance(e, APIResult): return api_result(e.error_code, e.error_message, **e.params), 200 logger.warning('API unknown error: %s', repr(e)) return api_result(UNKNOWN_ERROR, e.message), 200
from django.utils.log import getLogger 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): ''' Абстрактный класс для исполнения кода в фоновом режиме.
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)
from m3.actions import (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
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
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)
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): '''