Exemplo n.º 1
0
 def get_pack_instance(self, pack):
     """
     Возвращает экземпляр зарегистрированного ActionPack.
     @pack может быть:
     - классом
     - строкой с именем класса в формате "package/ClassName"
     """
     if inspect.isclass(pack):
         pack = tools._name_class(pack)
     return self._pack_instances_by_name.get(pack)
Exemplo n.º 2
0
 def get_pack_instance(self, pack):
     """
     Возвращает экземпляр зарегистрированного ActionPack.
     @pack может быть:
     - классом
     - строкой с именем класса в формате "package/ClassName"
     """
     if inspect.isclass(pack):
         pack = tools._name_class(pack)
     return self._pack_instances_by_name.get(pack)
Exemplo n.º 3
0
    def _populate_pack(self, pack):
        """
        Подписка зарегистрированных слушателей на pack.actions
        """
        # каждый отдельный Pack должен регистрироваться ровно один раз
        # уникльность Pack определяется следующим ключом
        pack_name = tools._name_class(pack.__class__)
        if pack_name in self._pack_instances_by_name:
            # попытка перерегистрации отмечается предупреждением
            raise RuntimeError(
                'WARNING! Pack reregistration blocked!:\n\tPack: %s'
                % pack_name
            )
        else:
            # ActionPack запоминается, как уже зарегистрированный
            self._pack_instances_by_name[pack_name] = pack
            self._log(
                self.LOG_MORE,
                'Pack reregistered:\n\tPack: %s'
                % pack_name)

        # регистрация ActionPack, как основного для модели
        model = getattr(pack, 'model', getattr(pack, 'tree_model', None))
        if model and getattr(pack, '_is_primary_for_model', True):
            model_name = model.__name__
            try:
                # если для модели уже зарегистрирован ActionPack
                # возбуждается исключение
                raise AssertionError(
                    "For model %s already registered primary pack: %r"
                    % (model_name, self._model_register[model_name]))
            except KeyError:
                # модель ещё не регистрировалась - регистрируется
                self._model_register[model_name] = pack

        # в Pack инжектируется функция получения Pack`а
        # для указанной по имени модели
        pack._get_model_pack = self.get

        for action in pack.actions:
            name = self._name_action(action, pack_name)
            # возбуждение исключения при коллизии short_names
            if name in self._actions:
                raise RuntimeError(
                    'Name="%s" can not be registered for action %r,\n'
                    'because this name registered for %r!'
                    % (name, action, self._actions[name]))
            self._actions[name] = action

        for subpack in pack.subpacks:
            self._populate_pack(subpack)

        self._is_configured = False
Exemplo n.º 4
0
    def _populate_pack(self, pack):
        """
        Подписка зарегистрированных слушателей на pack.actions
        """
        # каждый отдельный Pack должен регистрироваться ровно один раз
        # уникльность Pack определяется следующим ключом
        pack_name = tools._name_class(pack.__class__)
        if pack_name in self._pack_instances_by_name:
            # попытка перерегистрации отмечается предупреждением
            raise RuntimeError(
                'WARNING! Pack reregistration blocked!:\n\tPack: %s' %
                pack_name)
        else:
            # ActionPack запоминается, как уже зарегистрированный
            self._pack_instances_by_name[pack_name] = pack
            self._log(self.LOG_MORE,
                      'Pack reregistered:\n\tPack: %s' % pack_name)

        # регистрация ActionPack, как основного для модели
        model = getattr(pack, 'model', getattr(pack, 'tree_model', None))
        if model and getattr(pack, '_is_primary_for_model', True):
            model_name = model.__name__
            try:
                # если для модели уже зарегистрирован ActionPack
                # возбуждается исключение
                raise AssertionError(
                    "For model %s already registered primary pack: %r" %
                    (model_name, self._model_register[model_name]))
            except KeyError:
                # модель ещё не регистрировалась - регистрируется
                self._model_register[model_name] = pack

        # в Pack инжектируется функция получения Pack`а
        # для указанной по имени модели
        pack._get_model_pack = self.get

        for action in pack.actions:
            name = self._name_action(action, pack_name)
            # возбуждение исключения при коллизии short_names
            if name in self._actions:
                raise RuntimeError(
                    'Name="%s" can not be registered for action %r,\n'
                    'because this name registered for %r!' %
                    (name, action, self._actions[name]))
            self._actions[name] = action

        for subpack in pack.subpacks:
            self._populate_pack(subpack)

        self._is_configured = False