Состав модуля¶
Основные объекты библиотеки: механизмы проверки прав, экшены, паки, контроллеры, кэш контроллеров¶
- class m3.actions.__init__.AbstractPermissionChecker¶
Абстрактный механизм проверки прав
- static get_perm_code(action_or_pack, subpermission=None)¶
Возвращает код действия, для контроля прав доступа
Параметры: - action_or_pack (m3_core.actions.Action либо m3_core.actions.ActionPack) – экшен или пак, для которого возвращается код доступа
- subpermission (basestring) – код подправа
Результат: код действия для контроля прав доступа
Тип результата: basestring
- has_action_permission(request, action, subpermission=None)¶
Метод должен возвращать True, если выполнение экшена допустимо в контексте запроса
Параметры: - request (django.http.Request) – запрос
- action (m3_core.actions.Action) – Экшен, наличие прав на выполнение которого проверяется
Результат: Допустимость выполнения экшена в контесте запроса
Тип результата: True или False
- has_pack_permission(request, pack, permission)¶
Метод должен возвращать True, если действие, характеризуемое парой pack/permission, допустимо в контексте запроса
Параметры: - request (django.http.Request) – запрос
- pack (m3_core.actions.ActionPack) – пак, для которого возвращается код доступа
Результат: Допустимость пака в контесте запроса
Тип результата: True или False
- class m3.actions.__init__.Action¶
Базовый класс, от которого должны наследоваться все Action’ы в системе. Заменяет собой классические вьюшки Django.
- classmethod absolute_url()¶
Возвращает полный путь до действия. НО при условии что этот экшен используется ТОЛЬКО В ОДНОМ ПАКЕ И КОНТРОЛЛЕРЕ, иначе валим всех! Ищет перебором!
Результат: полный путь до действия Тип результата: basestring
- context_declaration()¶
Метод объявления необходимости наличия определенных параметров в контексте.
Должен возвращать список из экземпляров ActionContextDeclaration либо словарь описания контекста для DeclarativeActionContext
Результат: описание необходимости наличия определенных параметров в запросе Тип результата: list of m3_core.actions.context.ActionContextDeclaration либо m3_core.actions.context.DeclarativeActionContext
- controller = None¶
Ссылка на контроллер к которому принадлежит данный Action
- get_absolute_url()¶
Возвращает полный путь от хоста до конечного экшена @deprecated: Дублирует absolute_url
- get_packs_url()¶
Возвращает строку, полный адрес от контроллера до текущего экшена
Результат: полный адрес от контроллера до текущего экшена Тип результата: basestring
- get_perm_code(subpermission=None)¶
Получение кода (под)права
- has_perm(request, subpermission=None)¶
Интерфейсный метод проверки (под)прав экшна.
Использовать ВМЕСТО has_permission/has_sub_permission
Параметры: request (django.http.Request) – запрос
- need_check_permission = False¶
Признак обработки прав доступа, при выполнении действия (по-умолчанию отключен) Как обрабатывается этот признак - смотри в has_permission
- parent = None¶
Ссылка на ActionPack к которому принадлежит данный Action
- path = None¶
Логический путь действия в прикладной системе. Используется только для отображения и группировки действий с одинаковым путем. Также может использоваться для создания меню. Например, путь может быть: “СправочникиОбщие” или “Реестры”
- post_run(request, context, response)¶
Метод для постобработка результата работы экшенаа.
Параметры: - request (django.http.Request) – запрос
- context (m3_core.actions.context.ActionContext) – Контекст выполнения операции, востанавливаемый из контекств
- response (наследник m3_core.actions.results.ActionResult) – результат выполнения экшена
- pre_run(request, context)¶
Метод для предварительной обработки входящего запроса и контекста, перед передачений в run(). Если возвращает значение отличное от None, обработка запроса прекращается и результат уходит во вьюшку контроллера.
Параметры: - request (django.http.Request) – запрос
- context (m3_core.actions.context.ActionContext) – Контекст выполнения операции, восстанавливаемый из контекств
Результат: None либо объект для обработке во вьюшке контроллера
- run(request, context)¶
Обеспечивает непосредственное исполнение запроса (аналог views в Django). Обязательно должен быть перекрыт в наследнике.
Параметры: - request (django.http.Request) – запрос
- context (m3_core.actions.context.ActionContext) – Контекст выполнения операции, востанавливаемый из контекств
Результат: результат выполнения экшена
Тип результата: наследник m3_core.actions.results.ActionResult
- sub_permissions = {}¶
Словарь внутренних прав доступа, используемых в действии ключ - код права, который совмещается с кодом действия значение - наименование права Пример: {‘tab2’:u’Редактирование вкладки Доп. сведения’, ‘work_visible’:u’Просмотр сведений о работе’} Общий код права доступа будет иметь вид: /edit#tab2 и /edit#work_visible соответственно Как обрабатывается этот список - смотри в has_sub_permission
- url = ''¶
Часть адреса запроса которая однозначно определяет его принадлежность к конкретному Action’у
- verbose_name = None¶
Наименование действия для отображения
- class m3.actions.__init__.ActionController(url='', name=None)¶
Класс коонтроллер - обеспечивает обработку пользовательских запросов путем передачи их на исполнение соответствущим Action’ам
- class FakePacks¶
Класс содержит заглушки методов, чтобы инспектор кода не ругался, т.к. настоящие методы присваиваются классу в рантайме.
- ActionController.append_pack(pack)¶
Добавляет пак в контроллер.
Параметры: pack (m3_core.actions.ActionPack) – пак, который добавляется в контроллер
- ActionController.build_context(request, rules)¶
Выполняет построение контекста вызова операции ActionContext на основе переданного request
Параметры: - request (django.http.Request) – запрос
- rules (dict) – построение контекста
Результат: пустой экземпляр контекста
Тип результата: m3_core.actions.context.DeclarativeActionContext() или m3_core.actions.context.ActionContext
- ActionController.dump_urls()¶
Отладочный метод. Выводит в консоль список всех адрес зарегистрированных в контроллере.
- ActionController.extend_packs(packs)¶
Производит массовое добавление экшенпаков в контроллер.
Параметры: packs (список объектов m3_core.actions.ActionPack) – список паков, которые необходимо зарегистрировать в контроллере
- ActionController.get_action_by_url(url)¶
Получить Action по url
- ActionController.get_action_url(type)¶
Возвращает полный URL адрес для класс или имени класса экшена action
- ActionController.get_packs()¶
Возвращение всех паков в контроллере
- ActionController.get_top_actions()¶
Получение списка действий или наборов, находящихся на первом уровне
- ActionController.packs = None¶
ДЛЯ СОВМЕСТИМОСТИ. Имитирует список паков торчащий наружу
- ActionController.process_request(request)¶
Обработка входящего запроса request от клиента. Обрабатывается по аналогии с UrlResolver’ом Django
Параметры: request (django.http.Request) – запрос Результат: результат выполнения экшена Тип результата: наследник m3_core.actions.results.ActionResult Raise: http.Http404
- ActionController.reset()¶
Сброс всего, что наделал контроллер с паками и экшенами
- ActionController.urlpattern¶
Возвращает кортеж вида (pattern, method), пригодный для регистрации в urlpatterns Django
- ActionController.verbose_name = None¶
Наименование Контроллера для отображения
- ActionController.wrap_action(dest_pack, dest_action, wrap_pack)¶
Вставляет перед экшеном dest_action, входящим в пак dest_pack, промежуточный пак wrap_pack.
ВНИМАНИЕ! Экшены как правило обращаются к своим пакам через атрибут “parent”, поэтому, вероятно, будут возникать ошибки, из-за того, что оборачивающий пак не предоставляет методы изначального пака. Оборачивающий пак можно наследовать от оригинального, но тогда вместо оборачивая целесообразно использовать подмену паков.
Параметры: - dest_pack (m3_core.actions.ActionPack) – Пак в который входит оборачиваемый экшен
- dest_action (m3_core.actions.Action) – Оборачиваемый экшен
- wrap_pack (m3_core.actions.ActionPack) – Оборачивающий пак
- ActionController.wrap_pack(dest_pack, wrap_pack)¶
Вставляет экшенпак wrap_pack внутрь иерархии перед dest_pack. Таким образом можно перехватывать запросы и ответы пака dest_pack.
Параметры: - dest_pack (m3_core.actions.ActionPack) – Пак который будем оборачивать
- wrap_pack (m3_core.actions.ActionPack) – Оборачивающий пак
- class m3.actions.__init__.ActionPack¶
Базовый класс для всех ActionPack’ов. Предназначен для хранения в себе других экшенов и паков, схожих по целям.
- classmethod absolute_url()¶
Возвращает полный адрес (url) от контроллера до текущего экшенпака
- actions = None¶
Список действий зарегистрированных на исполнение в данном пакете
- controller = None¶
Ссылка на родительский ActionController
- get_absolute_url()¶
Возвращает абсолютный путь (НОРМАЛЬНО, в отличие от absolute_url)
- get_perm_code(permission=None)¶
Получение кода (под)права
- classmethod get_short_name()¶
Имя пака для поиска в ControllerCache
Результат: Имя пака Тип результата: basestring
- classmethod get_verbose_name()¶
Получение понятного имени пака
Тип результата: unicode
- has_perm(request, permission)¶
Интерфейсный метод проверки подправ пака.
Использовать ВМЕСТО has_sub_permission
Параметры: request (django.http.Request) – запрос
- need_check_permission = False¶
Признак обработки прав доступа, при выполнении дочерних действий (по-умолчанию отключен) Как обрабатывается этот признак - смотри в Action.has_permission
- parent = None¶
Ссылка на вышестоящий пакет, тот в котором зарегистрирован данный пакет
- path = None¶
Логический путь набора действий в прикладной системе. Используется только для отображения и группировке наборов с одинаковым путем. Также может использоваться для создания меню. Например, путь может быть: “СправочникиОбщие” или “Реестры”
- post_run(request, context, response)¶
Метод для постобработки результата работы вышестоящего экшена или пака. Принимает исходный запрос request, результат работы response и извлеченный контекст context.
Параметры: - request (django.http.Request) – запрос
- context (m3_core.actions.context.ActionContext) – Контекст выполнения операции, восстанавливаемый из контекств
- response (m3_core.actions.results.ActionResult) – ответ, полученный в результате выполнения действия
- pre_run(request, context)¶
Метод для предварительной обработки входящего запроса и контекста перед передачений в нижестоящий экшен или пак. Если возвращает значение отличное от None, обработка запроса прекращается и результат уходит во вьюшку контроллера.
Параметры: - request (django.http.Request) – запрос
- context (m3_core.actions.context.ActionContext) – Контекст выполнения операции, восстанавливаемый из контекств
- sub_permissions = {}¶
Словарь внутренних прав доступа, используемых в наборе действий ключ - код права, который совмещается с адресом (кодом) набора действий значение - наименование права Пример: {‘edit’:u’Редактирование записи’} Общий код права доступа будет иметь вид: /users#edit Как обрабатывается этот список - смотри в has_sub_permission
- subpacks = None¶
Список дочерних пакетов (подпакетов), зарегистрированных на исполнение в данном пакете
- verbose_name = None¶
Наименование Набора действий для отображения
- class m3.actions.__init__.AuthUserPermissionChecker¶
Backend, проверяющий права через django.contrib.auth.models.User.has_perm
Требует подключения в проекте session-middleware, т.к. опирается на наличие в request атрибута ‘user’, указывающего на текущего пользователя
- class m3.actions.__init__.BypassPermissionChecker¶
Механизм проверки прав, “разрешающий всем и всё”
- class m3.actions.__init__.ControllerCache¶
Внутренний класс платформы, который отвечает за хранение кеша контроллеров и связанных с ним экшенов и паков.
- classmethod dump_urls()¶
Отладочный метод. Выводит в консоль адреса всех контроллеров зарегистрированных в кэше.
- classmethod find_action(action)¶
Ищет заданный экшен по имени класса или классу во всех зарегистрированных контроллерах. Возвращает экземпляр первого найденного экшена.
Параметры: action (строка формата package.Class или класс) – имя класса или класс экшена Результат: экземпляр найденного пака Тип результата: m3_core.actions.Action
- classmethod find_node_by_perm(perm)¶
Возвращает экшн/пак по коду права, или None, если таковых не найдено :param string perm: код права :return: экземпляр найденного пара/экшна
- classmethod find_pack(pack)¶
Ищет заданный пак по имени класса или классу во всех зарегистрированных контроллерах. Возвращает экземпляр первого найденного пака.
Параметры: pack (строка формата package.Class или класс) – имя класса или класс пака Результат: экземпляр найденного пака Тип результата: m3_core.actions.ActionPack
- classmethod get_action_by_url(url)¶
Возвращает Action по переданному url
- classmethod get_action_url(type)¶
Возвращает URL экшена type по его имени или классу
- classmethod get_controllers()¶
Возвращает множество всех контроллеров зарегистрированных в кэше
- classmethod populate()¶
Загружает в кэш ActionController’ы из перечисленных в INSTALLED_APPS приложений. В каждом из них загружает модуль app_meta и пытается выполнить метод register_actions внутри него. Выполняется только один раз. Возвращает истину в случае успеха.
Результат: флаг успешного завершения Тип результата: boolean
- classmethod register_controller(controller)¶
Выполняет регистрацию контроллера controller во внутреннем кеше.
- classmethod require_update()¶
Сбрасывает внутренний флаг заполненности контроллера. Следующий запрос к контроллеру вызовет перестройку иерархии экшенов и паков.
- class m3.actions.__init__.LazyContainer(fabric)¶
Ленивая обёртка для объектов, указываемых в settings. Предназначена для позднеё загрузки объектов - по первому обращению
- class m3.actions.__init__.LegacyPermissionChecker¶
Мех-м проверки прав, созданный для совместимости со старыми проектами
- has_action_permission(request, action, subpermission=None)¶
Проверка пака на выполнение действия для указанного пользователя
- has_pack_permission(request, pack, permission)¶
Проверка на внутреннее право пака для указанного пользователя
Модуль, реализущий работу с контекстом выполнения операции¶
- class m3.actions.context.ActionContext(**kwargs)¶
Контекст выполнения операции, восстанавливаемый из запроса.
- exception RequiredFailed(reason)¶
Для совместимости
- class ActionContext.ValuesList(separator=', ', type=<type 'int'>, allow_empty=True)¶
Класс для описания параметров, которые будут передаваться в виде списка значений, разделенных определенным символом
- ActionContext.build(request, rules)¶
Выполняет заполнение собственных атрибутов согласно переданному запросу, исходя из списка правил
- :param request:запрос, на основе которого производится
- заполнение контекста
Параметры: rules (список m3_core.actions.context.ActionContextDeclaration) – правила извлечения контекста из запроса
- ActionContext.check_required(rules)¶
Проверяет наличие обязательных параметров
Параметры: rules (список m3_core.actions.context.ActionContextDeclaration) – правила извлечения контекста из запроса Raise: ActionContext.RequiredFailed
- ActionContext.combine(context)¶
Объединение контекстов друг с другом.
Параметры: context (m3_core.actions.context.ActionContext) – контекст, который объединяеться с текущим Результат: новый экземпляр контекста, который получился в результате слияния с текущим. Все существовавшие значения сохраняются. Тип результата: m3_core.actions.context.ActionContext
- ActionContext.convert_value(raw_value, arg_type)¶
Возвращает значение raw_value, преобразованное в заданный тип arg_type
- ActionContext.json()¶
Рендеринг контекста в виде javascript объекта
- class m3.actions.context.ActionContextDeclaration(name='', default=None, type=None, required=False, verbose_name='', *args, **kwargs)¶
Класс, который определяет правило извлечения параметра из запроса и необходимость его наличия в объекте контекста ActionContext.
Параметры: - name (str) – имя параметра
- type – тип извлекаемого значения
- required (bool) – указывает что параметр обязательный
- default – значение параметра по умолчанию, используется если его нет в запросе, но наличие обязательно
- verbose_name (unicode) – человеческое имя параметра, необходимо для сообщений об ошибках
- human_name()¶
Возвращает человеческое название параметра verbose_name
- exception m3.actions.context.ActionContextException¶
Базовый класс для исключений контекста
- exception m3.actions.context.ContextBuildingError(requiremets=None, errors=None)¶
Ошибка построения контекста
- exception m3.actions.context.ConversionFailed(value, type, *args, **kwargs)¶
Исключение, которое выбрасывается, если значение из запроса value не удалось привести к типу type, указанному в правиле ActionContextDeclaration
- exception m3.actions.context.CriticalContextBuildingError(requiremets=None, errors=None)¶
Критическая ошибка построения контекста
- class m3.actions.context.DeclarativeActionContext(**kwargs)¶
ActionContext, использующий декларативное описание контекста
- build(request, rules)¶
Выполняет заполнение собственных атрибутов согласно переданному запросу, исходя из списка правил
- :param request:запрос, на основе которого производится
- заполнение контекста
Параметры: rules (список m3_core.actions.context.ActionContextDeclaration) – правила извлечения контекста из запроса Raise: TypeError, ContextBuildingError, CriticalContextBuildingError
- classmethod matches(data)¶
Возвращает True, если объект data “похож” на правила для DeclarativeActionContext :param data: проверяемый объект :param type: object
Результат: True, если data “похож” на набор правил Тип результата: boolean
- classmethod register_parser(name, parser)¶
Регистрация парсера
Параметры: - parser (callable-object) – парсер
- name (unicode) – имя, подо которым регистрируется парсер
- exception m3.actions.context.RequiredFailed(reason)¶
Исключительная ситуация, которая выбрасывается в случае если фактическое наполнение контекста действия не соответствует описанным правилам
Результаты выполнения экшенов¶
- class m3.actions.results.ActionRedirectResult(action, context=None)¶
Перенаправляет обработку запроса на другой экшен. Экшен предварительно находится с помощью метода ActionController.get_action_url()
- class m3.actions.results.BaseContextedResult(data=None, context=None, http_params={})¶
Абстрактный базовый класс, который оперирует понятием результата выполнения операции, ‘отягощенного некоторым контектом’
- class m3.actions.results.HttpReadyResult(data=None, http_params={})¶
Результат выполнения операции в виде готового HttpResponse. Для данного класса в data храниться объект класса HttpResponse.
- class m3.actions.results.JsonResult(data=None, http_params={})¶
Результат выполнения операции в виде готового JSON объекта для возврата в response. Для данного класса в data храниться строка с данными JSON объекта.
- class m3.actions.results.OperationResult(success=True, code='', message='', *args, **kwargs)¶
Результат выполнения операции, описанный в виде Ajax результата ExtJS: success или failure. В случае если операция выполнена успешно, параметр success должен быть True, иначе False.
Параметры: - success (boolean) – флаг успеха операции
- message (unicode) – сообщение, поясняющее результат выполнения операции.
- code (unicode) – текст javascript, который будет выполнен на клиенте в результате обработки результата операции.
- static by_message(message)¶
Возвращает экземпляр OperationResult построенный исходя из сообщения message. Если сообщение не пустое, то операция считается проваленной и success=False, иначе операция считается успешной success=True.
Параметры: message (unicode) – текст сообщения об ошибке, или не указан
- get_http_response()¶
Возвращает объект HttpResponse, соответствующий данному результату выполнения операции
Результат: http-ответ, соответствующий данному результату Тип результата: django.http.HttpResponse
- class m3.actions.results.PreJsonResult(data=None, secret_values=False, dict_list=None)¶
Результат выполнения операции в виде, например, списка объектов, готовых к сериализации в JSON формат и отправке в HttpResponse. В data передается объект для сериализации. В dict_list указывается список объектов и/или атрибутов вложенных объектов для более глубокой сериализации. Смотри класс т3.core.json.M3JSONEncoder. Параметр специфичный для проекта secret_values - используется чтобы указать, что передаются персональные обезличенные данные и их расшифровать перед отправкой клиенту.
- class m3.actions.results.TextResult(data=None, http_params={})¶
Результат, данные data которого напрямую передаются в HttpResponse
- class m3.actions.results.XMLResult(data=None, http_params={})¶
Результат в формате xml, данные которого напрямую передаются в HttpResponse
Исключения, возникающие при работе контроллера¶
- exception m3.actions.exceptions.ActionNotFoundException(clazz, *args, **kwargs)¶
Возникает в случае, если экшен не найден ни в одном контроллере
- exception m3.actions.exceptions.ActionPackNotFoundException(clazz, *args, **kwargs)¶
Возникает в случае, если пак не найден ни в одном контроллере
- exception m3.actions.exceptions.ActionUrlIsNotDefined(clazz, *args, **kwargs)¶
Возникает если в классе экшена не задан атрибут url. Это грозит тем, что контроллер не сможет найти и вызвать данный экшен при обработке запросов.
- exception m3.actions.exceptions.ApplicationLogicException(message)¶
Исключительная ситуация уровня бизнес-логики приложения.
- exception m3.actions.exceptions.ReinitException(clazz, *args, **kwargs)¶
Возникает, если из-за неправильной структуры паков один и тот же экземпляр экшена может быть повторно инициализирован неверными значениями.
Хелперы для отработки расширяемых конфигураций url’ов¶
- class m3.actions.urls.ActionsNameCache(*args, **kwargs)¶
Кеш, используемый для хранения соответствия имен экшенов и паков соответствующим пакам
- handler(cache, dimentions)¶
Хендлер сборки кеша
- class m3.actions.urls.PacksNameCache(*args, **kwargs)¶
Кеш, используемый для хранения соответствия имен экшенов и паков соответствующим пакам
- handler(cache, dimentions)¶
Хендлер сборки кеша
- m3.actions.urls.get_action(action_name)¶
Возвращает полный класс экшена, объявленного с указанным квалифицирующим именем.
- m3.actions.urls.get_acton_url(action)¶
Возвращает абсолютный путь до
- m3.actions.urls.get_app_urlpatterns()¶
Возвращает конфигурацию урлов, объявленных в app_meta приложений.
Данная функция не проглатывает ошибки, а выбрасывает все наружу. Перехват исключительных ситуаций данной фунции необходимо осуществлять вручную в urls.py прикладных приложений
- m3.actions.urls.get_pack(pack_name)¶
Получает экшенпак по имени
- m3.actions.urls.get_pack_by_url(url)¶
Возвращает набор экшенов по переданному url
- m3.actions.urls.get_pack_instance(pack_name)¶
Получает экземпляр набора экшенов по имени из контроллеров
- m3.actions.urls.get_pack_url(pack_name)¶
Возвращает абсолютный путь для набора экшенов
- m3.actions.urls.get_url(action)¶
Возвращает абсолютный путь до
- m3.actions.urls.inner_name_cache_handler(for_actions=True)¶
Внутренний метод обхода дерева паков и экшенов. Используется в хендлерах сборки кешей
Вспомогательные функции используемые в паках¶
- m3.actions.utils.apply_column_filter(query, request, map)¶
Накладывает колоночный фильтр
Параметры: - query (django.db.models.query.QuerySet) – Запрос
- request – Данные с клиента включающие фильтры
- map –
карта связи фильтров в request и полей в объекте: ключ - поле объекта, значение - параметр фильтра, например:
{‘unit__name’:’unit_ref_name’}
- m3.actions.utils.apply_search_filter(query, filter, fields)¶
Накладывает фильтр поиска на запрос. Вхождение каждого элемента фильтра ищется в заданных полях. @param query: django.db.models.query.QuerySet @param filter: Строка фильтра @param fields: Список полей модели по которым будет поиск
- m3.actions.utils.apply_sort_order(query, columns, sort_order)¶
Закладывает на запрос порядок сортировки. Сначала если в описании колонок columns есть code, то сортируем по нему, иначе если есть по name. Если задан sort_order, то он главнее всех.
Параметры: - query (django.db.models.query.QuerySet) – запрос, к которому накладывается порядок сортировки
- columns (dict или tuple) – список колонок
- sort_order (list) – если не пустой, то сортирует по нему
Результат: запрос с наложенной сортировкой
Тип результата: django.db.models.query.QuerySet
- m3.actions.utils.bind_object_from_request_to_form(request, obj_factory, form, request_id_name='id', exclusion=None)¶
Функция извлекает объект из запроса по id, создает его экземпляр и биндит к форме
Параметры: - request (django.http.Request) – Запрос от клиента содержащий id объекта
- obj_factory (callable-object) – Функция возвращающая объект по его id
- form – Класс формы к которому привязывается объект
- request_id_name – Имя параметра запроса соответствующего ID объекта
- m3.actions.utils.bind_request_form_to_object(request, obj_factory, form, request_id_name='id', exclusion=None)¶
Функция создает объект по id в запросе и заполняет его атрибуты из данных пришедшей формы @param request: Запрос от клиента содержащий id объекта @param obj_factory: Функция возвращающая объект по его id @param form: Класс формы к которому привязывается объект @param request_id_name: Имя параметра запроса соответствующего ID объекта
- m3.actions.utils.create_search_filter(filter_text, fields)¶
Фильтрация производится по списку полей fields и введеному пользователем тексту filter_text. работает по следующей схеме
- Пример:
- fields = [‘name’, ‘family’] filter_text = u’Вася Пупкин’
- Получится условие WHERE:
- (name like ‘%Вася%’ or family like ‘%Вася%’) and (name like ‘%Пупкин%’ or family like ‘%Пупкин%’)
если один из параметров пуст, то возвращает пустой Q()
Параметры: - filter_text (str) – текст, пот которому ведется поиск
- fields (list) – список полей, по которым нужно искать
Результат: фильтр, реализующий поиск слов по полям
Тип результата: django.db.models.query_utils.Q
Определяет необходимость выполнения select_related на запросе.
Параметры: query (django.db.models.query.QuerySet) – запрос, к которому применяется select_related
- m3.actions.utils.extract_int(request, key)¶
Извлекает целое число из запроса
Параметры: key (str) – имя параметра Результат: целочисленное значение параметра с заданным именем Тип результата: int
- m3.actions.utils.extract_int_list(request, key)¶
- Извлекает список целых чисел из запроса
- ..note:: разделителем в строком значении должна быть запятая
Параметры: key (unicode) – имя параметра Результат: список целочисленных значений из параметра с заданным именем Тип результата: list
- m3.actions.utils.fetch_search_tree(model_or_query, filter, branch_id=None, parent_field_name='parent')¶
По заданному фильтру filter и модели model формирует развернутое дерево с результатами поиска. Если filter пустой, то получается полностью развернутое дерево.
- m3.actions.utils.safe_delete_record(model, id=None)¶
Безопасное удаление записи в базе. В отличие от джанговского ORM не удаляет каскадно. Возвращает True в случае успеха, иначе False @deprecated нужно использовать BaseModel.safe_delete()
или m3.db.safe_delete(obj)
Экшены для работы в асинхронном режиме¶
- class m3.actions.async.AsyncAction¶
Экшен обработки запросов с клиента. В данном варианте инстанс класса воркера общий для всех http запросов экземпляра приложения, поэтому если один пользователь начал фоновую операцию, все пользователи этого сервера будут видеть такой же прогресс. Можно с помощью словаря сессий, где бы хранились инстансы воркеров, реализовать для каждого пользователя свою операцию, или же с помощью мутексов глобальную блокировку операции на уровне приложения. При наследовании должен быть определен атрибут worker_cls - класс наследующий/имплементирующий IBackgroundWorker
- class m3.actions.async.AsyncOperationResult(value=0.0, text='', alive=True)¶
Результат выполнения асинхронной операции.
- class m3.actions.async.IBackgroundWorker(boundary='', context=None, *args, **kwargs)¶
Абстрактный класс для исполнения кода в фоновом режиме. Соответсвующие методы должны быть определены разработчиком. Тк класс представляет собой наследник Thread, нужно понимать что фактически при использовании будет создан новый тред, и учитывать это при доступе к ресурсам приложения, кои могут быть модифицированы другими тредами. Методы stop, start и ping должны возвращать экземпляры AsyncOperationResult. Вообще говоря, можно реализовать данный класс подругому, главное чтобы был имплементирован интерфейс (например если есть нужда использовать мутекс на уровне нескольких инстансов приложений)
- check_state()¶
Проверяет состояние глобальной блокировки операции. Возвращает кортеж из двух элементов (is_active, status_data), где is_active=True/False - показывает активность установленной блокировки, и status_data - произвольный объект (чаще строка), в котором находится описание состоания операции.
- lock()¶
Устанавливает глобальную блокировку по инстансу с использованием механизма мютексов
- lock_result(result)¶
Блокирует результат выполнения операции
- refresh_state(status_data)¶
Обновляет состояние блокировки
- request()¶
Запрос состояния операции
- result()¶
Запрос на получение результата асинхронной операции
- run()¶
Метод вызывается после вызоыва метода start() в новом потоке, здесь фактически следует писать собственный код
- start()¶
Запускает исполнение кода. Метод не абстрактный, при замещении обязательно вызывать суперкласс
- stop()¶
Метод остановки операции
- unlock()¶
Освобождает глобальную блокировку состояния
Интерфейсы¶
- class m3.actions.interfaces.IMultiSelectablePack¶
- Интерфейс pack-классов для множественного выбора значений из
- полей ExtMultiSelectField
- get_display_dict(key, value_field='id', display_field='name')¶
Получить список словарей, необходимый для представления выбранных значений ExtMultiSelectField Пример результата: [{‘id’:0,’name’:u’‘},]
- get_multi_select_url()¶
Получить адрес для запроса диалога множественного выбора элемента
- class m3.actions.interfaces.ISelectablePack¶
Интерфейс pack-классов для выбора значений из полей ExtDictSelectField
- get_autocomplete_url()¶
Получить адрес для запроса элементов подходящих введенному в поле тексту
- get_display_text(key, attr_name=None)¶
Получить отображаемое значение записи (или атрибута attr_name) по ключу key
- get_edit_url()¶
Получить адрес для запроса диалога редактирования выбранного элемента
- get_select_url()¶
Получить адрес для запроса диалога выбора элемента