def list(self):
        if not self.query:
            q = self.db.query(self.model)
            if self.ordering:
                q = q.order_by(*self.ordering)
        else:
            q = self.query

        try:
            if self.paginate:
                objects = h.page(q, self.request, items_per_page=self.paginate)
            else:
                objects = q
        except:
            self.request.session.flash(
                _('Помилка. Неможливо відобразити список.'))
            return HTTPFound(
                location=self.request.route_url('%s_list' % self.verbose_name))

        self.context.update({'objects': objects})
        self.context.update({'fields': get_columns_from_model(self.model)})
        self.context.update({'my_model': self.model.__name__.lower()})
        return render_to_response('%s:templates/admin_list.mako' % APP_NAME,
                                  self.context,
                                  request=self.request)
    def update(self):
        id = self.request.matchdict.get('id')

        form = self.form(model=self.model, request=self.request.POST or None)
        try:
            if form.validate():
                obj = self.db.query(self.model).filter_by(id=id).first()
                if hasattr(form, 'process_obj'):
                    form.process_obj(obj)
                form.populate_obj(obj)
                self.before_update(form, obj)
                self.db.add(obj)
                self.after_update(form, obj)
            else:
                if self.request.is_xhr:
                    return xhr_form_errors(form.errors, self.request)

                self.context.update({'form': form, 'id': id})
                self.context.update({'my_model': self.model.__name__.lower()})
                return render_to_response('%s:templates/admin_update.mako' %
                                          APP_NAME,
                                          self.context,
                                          request=self.request)
        except:
            flash_msg = _('Помилка. Неможливо оновити елемент.')

            if self.request.is_xhr:
                return xhr_flash_errors([flash_msg], self.request)

            self.context.update({'form': form, 'id': id})
            self.context.update({'my_model': self.model.__name__.lower()})
            self.request.session.flash(flash_msg)
            return render_to_response('%s:templates/admin_update.mako' %
                                      APP_NAME,
                                      self.context,
                                      request=self.request)

        flash_msg = _('Елемент успішно оновлений.')

        if self.request.is_xhr:
            return xhr_flash_messages([flash_msg], self.request)

        self.request.session.flash(flash_msg)
        return HTTPFound(location=self.get_redirect_location(obj))
    def create(self):
        form = self.form(model=self.model, request=self.request.POST or None)
        try:
            if form.validate() and self.request.method == "POST":
                obj = self.model()
                if hasattr(form, 'process_obj'):
                    form.process_obj(obj)
                form.populate_obj(obj)
                self.before_create(form, obj)
                self.db.add(obj)
                self.after_create(form, obj)
            else:
                if self.request.is_xhr:
                    return xhr_form_errors(form.errors, self.request)

                self.context.update({'form': form})
                self.context.update({'my_model': self.model.__name__.lower()})
                return render_to_response('%s:templates/admin_create.mako' %
                                          APP_NAME,
                                          self.context,
                                          request=self.request)
        except Exception as e:
            flash_msg = _('Помилка. Неможливо створити елемент. %s'
                          ) % self.verbose_name_i18n

            if self.request.is_xhr:
                return xhr_flash_errors([flash_msg], self.request)

            self.context.update({'form': form})
            self.context.update({'my_model': self.model.__name__.lower()})
            self.request.session.flash(flash_msg)
            return render_to_response('%s:templates/admin_create.mako' %
                                      APP_NAME,
                                      self.context,
                                      request=self.request)

        flash_msg = _(
            '%s успішно створено.') % self.verbose_name_i18n.capitalize()

        if self.request.is_xhr:
            return xhr_flash_messages([flash_msg], self.request)

        self.request.session.flash(flash_msg)
        return HTTPFound(location=self.get_redirect_location(obj))
    def delete(self):
        if 'id' in self.request.matchdict:
            id = self.request.matchdict['id']
        else:
            id = self.request.params.get('id')

        if not id:
            flash_msg = _('Помилка. Не вибраний жоден з елементів.')

            if self.request.is_xhr:
                return xhr_flash_errors([flash_msg], self.request)

            self.request.session.flash(flash_msg)
            return HTTPFound(
                location=self.request.route_url('%s_list' % self.verbose_name))

        try:
            self.before_delete()
            obj = self.db.query(self.model).filter_by(id=id).delete()
            self.after_delete()
        except:
            flash_msg = _('Неможливо видалити елемент.')

            if self.request.is_xhr:
                return xhr_flash_errors([flash_msg], self.request)

            self.request.session.flash(flash_msg)
        else:
            flash_msg = _('Елемент успішно видалений.')

            if self.request.is_xhr:
                return xhr_flash_messages([flash_msg], self.request)

            self.request.session.flash(flash_msg)

        return HTTPFound(location=self.get_redirect_location(obj))
    def view(self):
        if 'slug' in self.request.matchdict:
            slug = self.request.matchdict.get('slug')
            obj = self.db.query(self.model).filter_by(slug=slug).first()
        else:
            id = self.request.matchdict.get('id')
            obj = self.db.query(self.model).filter_by(id=id).first()

        if obj:
            self.context.update({'object': obj})
            self.context.update({'my_model': self.model.__name__.lower()})
            return render_to_response('%s:templates/admin_view.mako' %
                                      APP_NAME,
                                      self.context,
                                      request=self.request)
        else:
            self.request.session.flash(
                _('Помилка при перегляді елементу.') % self.verbose_name_i18n)
            return HTTPFound(location=self.get_redirect_location(obj))
    def edit(self):
        if 'id' in self.request.matchdict:
            id = self.request.matchdict['id']
        else:
            id = self.request.params.get('id')

        obj = self.db.query(self.model).filter_by(id=id).first()
        if obj:
            form = self.form(model=self.model, obj=obj)
        else:
            self.request.session.flash(
                _('Помилка. Не вибраний жоден з елементів.'))
            return HTTPFound(
                location=self.request.route_url('%s_list' % self.verbose_name))

        self.context.update({'form': form, 'id': id})
        self.context.update({'my_model': self.model.__name__.lower()})
        return render_to_response('%s:templates/admin_update.mako' % APP_NAME,
                                  self.context,
                                  request=self.request)
def add_localizer(event, request=None):
    if request is None:
        request = getattr(event, 'request', get_current_request())

    request.translate = lambda string: _(string, request=request)