Пример #1
0
    def render(self, **kwargs):
        """render the form as html or json"""
        request = self.request
        if request.format != 'html':
            meth = getattr(self, 'render_%s_format' % request.format, None)
            if meth is not None:
                return meth(**kwargs)
            else:
                raise NotFound()

        if request.model_class:
            request.model_class = model_class = I18NModel(request.model_class, request)
            request.model_label = model_label = model_class.label
            request.model_plural = model_plural = model_class.plural
        else:
            model_class = request.model_class
            model_label = model_plural = ''
        self.update_resources()
        kwargs.update(
                      main = get_renderer('pyramid_formalchemy:templates/admin/master.pt').implementation(),
                      model_class=model_class,
                      model_name=request.model_name,
                      model_label=model_label,
                      model_plural=model_plural,
                      breadcrumb=self.breadcrumb(**kwargs),
                      actions=request.actions,
                      F_=get_translator()),
        return kwargs
Пример #2
0
 def delete_link():
     return lambda item: '''
     <form action="%(url)s" method="POST" class="ui-grid-icon ui-state-error ui-corner-all">
     <input type="submit" class="ui-icon ui-icon-circle-close" title="%(label)s" value="%(label)s" />
     </form>
     ''' % dict(url=self.request.fa_url(self.request.model_name, _pk(item), 'delete'),
                label=get_translator(request=self.request)('delete'))
Пример #3
0
 def edit_link():
     return lambda item: '''
     <form action="%(url)s" method="GET" class="ui-grid-icon ui-widget-header ui-corner-all">
     <input type="submit" class="ui-grid-icon ui-icon ui-icon-pencil" title="%(label)s" value="%(label)s" />
     </form>
     ''' % dict(url=self.request.fa_url(self.request.model_name, _pk(item), 'edit'),
                 label=get_translator(request=self.request)('edit'))
Пример #4
0
 def edit_link():
     return lambda item: '''
     <form action="%(url)s" method="GET" class="ui-grid-icon ui-widget-header ui-corner-all">
     <input type="submit" class="ui-grid-icon ui-icon ui-icon-pencil" title="%(label)s" value="%(label)s" />
     </form>
     ''' % dict(url=model_url('edit_%s' % self.member_name, id=_pk(item)),
                 label=get_translator()('edit'))
Пример #5
0
    def render(self, **kwargs):
        """render the form as html or json"""
        request = self.request
        if request.format != 'html':
            meth = getattr(self, 'render_%s_format' % request.format, None)
            if meth is not None:
                return meth(**kwargs)
            else:
                raise NotFound()

        if request.model_class:
            request.model_class = model_class = I18NModel(
                request.model_class, request)
            request.model_label = model_label = model_class.label
            request.model_plural = model_plural = model_class.plural
        else:
            model_class = request.model_class
            model_label = model_plural = ''
        self.update_resources()
        kwargs.update(main=get_renderer(
            'pyramid_formalchemy:templates/admin/master.pt').implementation(),
                      model_class=model_class,
                      model_name=request.model_name,
                      model_label=model_label,
                      model_plural=model_plural,
                      breadcrumb=self.breadcrumb(**kwargs),
                      actions=request.actions,
                      F_=get_translator()),
        return kwargs
Пример #6
0
 def edit_link():
     return lambda item: '''
     <form action="%(url)s" method="GET" class="ui-grid-icon ui-widget-header ui-corner-all">
     <input type="submit" class="ui-grid-icon ui-icon ui-icon-pencil" title="%(label)s" value="%(label)s" />
     </form>
     ''' % dict(url=model_url('edit_%s' % self.member_name, id=_pk(item)),
                 label=get_translator()('edit'))
Пример #7
0
 def edit_link():
     return lambda item: '''
     <form action="%(url)s" method="GET" class="ui-grid-icon ui-widget-header ui-corner-all">
     <input type="submit" class="ui-grid-icon ui-icon ui-icon-pencil" title="%(label)s" value="%(label)s" />
     </form>
     ''' % dict(url=self.request.fa_url(self.request.model_name,
                                        _pk(item), 'edit'),
                label=get_translator(request=self.request)('edit'))
Пример #8
0
 def delete_link():
     return lambda item: '''
     <form action="%(url)s" method="POST" class="ui-grid-icon ui-state-error ui-corner-all">
     <input type="submit" class="ui-icon ui-icon-circle-close" title="%(label)s" value="%(label)s" />
     <input type="hidden" name="_method" value="DELETE" />
     </form>
     ''' % dict(url=model_url(self.member_name, id=_pk(item)),
                label=get_translator()('delete'))
Пример #9
0
 def delete_link():
     return lambda item: '''
     <form action="%(url)s" method="POST" class="ui-grid-icon ui-state-error ui-corner-all">
     <input type="submit" class="ui-icon ui-icon-circle-close" title="%(label)s" value="%(label)s" />
     <input type="hidden" name="_method" value="DELETE" />
     </form>
     ''' % dict(url=model_url(self.member_name, id=_pk(item)),
                label=get_translator()('delete'))
Пример #10
0
 def delete_link():
     return lambda item: '''<form action="%(url)sdelete/%(id)s" method="POST">
                             <input type="submit" class="icon delete" title="%(label)s" value="" />
                             <input type="hidden" name="_method" value="DELETE" />
                             </form>
                         ''' % dict(
                                 url=model_URL, id=_pk(item),
                                 label=get_translator().gettext('delete'))
Пример #11
0
 def get_linker(action, modelname=modelname):
     _ = get_translator().gettext
     label = action == "edit" and _("edit") or _("delete")
     return lambda item: '<a href="%s" title="%s" class="icon %s">%s</a>' % (
         h.url_for(controller=controller, modelname=modelname, action=action, id=_pk(item)),
         label,
         action,
         label,
     )
Пример #12
0
 def delete_link():
     return lambda item: '''
     <form action="%(url)s" method="POST" class="ui-grid-icon ui-state-error ui-corner-all">
     <input type="submit" class="ui-icon ui-icon-circle-close" title="%(label)s" value="%(label)s" />
     </form>
     ''' % dict(url=self.request.fa_url(self.request.model_name,
                                        _pk(item), 'delete'),
                label=get_translator(request=self.request)
                ('delete'))
Пример #13
0
 def delete_link():
     model_url = url('models', modelname=modelname)
     return lambda item: '''<form action="%(url)s/%(id)s" method="POST">
                             <input type="submit" class="icon delete" title="%(label)s" value="" />
                             <input type="hidden" name="_method" value="DELETE" />
                             </form>
                         ''' % dict(url=model_url,
                                    id=_pk(item),
                                    label=get_translator().gettext(
                                        'delete'))
Пример #14
0
 def get_translator(self, **kwargs):
     """return a GNUTranslations object in the most convenient way
     """
     if 'F_' in kwargs:
         return kwargs.pop('F_')
     if 'lang' in kwargs:
         lang = kwargs.pop('lang')
     else:
         lang = 'en'
     return get_translator(lang=lang).gettext
Пример #15
0
 def delete(self, modelname, id):
     """Delete an instance of the given model type"""
     F_ = get_translator().gettext
     fs = self._model_fieldsets[modelname]
     S = self.Session()
     instance = S.query(fs.model.__class__).get(id)
     key = _pk(instance)
     S.delete(instance)
     S.commit()
     message = F_(_("Deleted %s %s")) % (modelname.encode("utf-8", "ignore"), key)
     flash(message)
     redirect_to(controller=self._name, modelname=modelname, action="list", id=None)
Пример #16
0
 def render(self, **kwargs):
     """render the form as html or json"""
     request = self.request
     if request.format != 'html':
         meth = getattr(self, 'render_%s_format' % request.format, None)
         if meth is not None:
             return meth(**kwargs)
         else:
             return exc.HTTPNotfound()
     kwargs.update(
                   main = get_renderer('formalchemy:ext/pyramid/forms/master.pt').implementation(),
                   model_name=self.model_name,
                   breadcrumb=self.breadcrumb(**kwargs),
                   F_=get_translator().gettext)
     return kwargs
Пример #17
0
    def render(self, **kwargs):
        """render the form as html or json"""
        request = self.request
        if request.format != 'html':
            meth = getattr(self, 'render_%s_format' % request.format, None)
            if meth is not None:
                return meth(**kwargs)
            else:
                raise NotFound()

        kwargs.update(
                      main = get_renderer('pyramid_formalchemy:templates/admin/master.pt').implementation(),
                      model_name=request.model_name,
                      breadcrumb=self.breadcrumb(**kwargs),
                      F_=get_translator())
        return kwargs
Пример #18
0
    def delete(self, modelname, id, format='html'):
        """Delete an instance of the given model type"""
        F_ = get_translator().gettext
        fs = self._model_fieldsets[modelname]
        S = self.Session()
        instance = S.query(fs.model.__class__).get(id)
        key = _pk(instance)
        S.delete(instance)
        S.commit()

        if format == 'html':
            message = F_(_('Deleted %s %s')) % (modelname.encode(
                'utf-8', 'ignore'), key)
            flash(message)
            redirect(url('models', modelname=modelname))
        else:
            return self.render_json(status=0)
Пример #19
0
    def delete(self, modelname, id, format='html'):
        """Delete an instance of the given model type"""
        F_ = get_translator().gettext
        fs = self._model_fieldsets[modelname]
        S = self.Session()
        instance = S.query(fs.model.__class__).get(id)
        key = _pk(instance)
        S.delete(instance)
        S.commit()

        if format == 'html':
            message = F_(_('Deleted %s %s')) % (modelname.encode('utf-8', 'ignore'),
                                                key)
            flash(message)
            redirect(url('models', modelname=modelname))
        else:
            return self.render_json(status=0)
Пример #20
0
 def render(self, format='html', **kwargs):
     """render the form as html or json"""
     if format != 'html':
         meth = getattr(self, 'render_%s_format' % format, None)
         if meth is not None:
             return meth(**kwargs)
         else:
             abort(404)
     kwargs.update(model_name=self.model_name or self.member_name,
                   prefix_name=self.prefix_name,
                   collection_name=self.collection_name,
                   member_name=self.member_name,
                   breadcrumb=self.breadcrumb(**kwargs),
                   F_=get_translator())
     if self.engine:
         return self.engine.render(self.template, **kwargs)
     else:
         return render(self.template, extra_vars=kwargs)
Пример #21
0
 def render(self, format='html', **kwargs):
     """render the form as html or json"""
     if format != 'html':
         meth = getattr(self, 'render_%s_format' % format, None)
         if meth is not None:
             return meth(**kwargs)
         else:
             abort(404)
     kwargs.update(model_name=self.model_name or self.member_name,
                   prefix_name=self.prefix_name,
                   collection_name=self.collection_name,
                   member_name=self.member_name,
                   breadcrumb=self.breadcrumb(**kwargs),
                   F_=get_translator())
     if self.engine:
         return self.engine.render(self.template, **kwargs)
     else:
         return render(self.template, extra_vars=kwargs)
Пример #22
0
 def render(self, *ids, **options):
     fieldsets = []
     if ids:
         ids = [self.get(id).__name__ for id in ids]
     else:
         ids = self._fs_dict.keys()
     for id, title in self._fs:
         if id in ids:
             fs = self._fs_dict[id]
             fs.focus = False
             fieldsets.append(dict(id=id, title=title, fs=fs))
     kwargs = dict(footer='', header='')
     kwargs.update(self._options)
     return self.template.render_unicode(id=self._id,
                                 rid=str(random())[2:],
                                 fieldsets=fieldsets,
                                 options=dumps(options),
                                 F_=get_translator(request=self._request),
                                 **kwargs)
Пример #23
0
 def render(self, *ids, **options):
     fieldsets = []
     if ids:
         ids = [self.get(id).__name__ for id in ids]
     else:
         ids = self._fs_dict.keys()
     for id, title in self._fs:
         if id in ids:
             fs = self._fs_dict[id]
             fs.focus = False
             fieldsets.append(dict(id=id, title=title, fs=fs))
     kwargs = dict(footer='', header='')
     kwargs.update(self._options)
     return self.template.render_unicode(
         id=self._id,
         rid=str(random())[2:],
         fieldsets=fieldsets,
         options=dumps(options),
         F_=get_translator(request=self.__request),
         **kwargs)
Пример #24
0
 def edit(self, modelname, id=None):
     """Edit (or create, if `id` is None) an instance of the given model type"""
     F_ = get_translator().gettext
     fs = self._model_fieldsets[modelname]
     S = self.Session()
     if id:
         instance = S.query(fs.model.__class__).get(id)
         c.fs = fs.bind(instance)
         title = "Edit"
     else:
         c.fs = fs.bind(fs.model.__class__, session=S)
         title = "New object"
     if request.method == "POST":
         c.fs = c.fs.bind(data=request.params)
         log.debug("saving %s w/ %s" % (c.fs.model.id, request.POST))
         if c.fs.validate():
             c.fs.sync()
             S.flush()
             if not id:
                 # needed if the object does not exist in db
                 if not object_session(c.fs.model):
                     S.save(c.fs.model)
                 message = _("Created %s %s")
             else:
                 S.refresh(c.fs.model)
                 message = _("Modified %s %s")
             S.commit()
             message = F_(message) % (modelname.encode("utf-8", "ignore"), _pk(c.fs.model))
             flash(message)
             redirect_to(modelname=modelname, action="list", id=None)
     return self._engine(
         "admin_edit",
         c=c,
         action=title,
         id=id,
         controller=self._name,
         modelname=modelname,
         custom_css=self._custom_css,
         custom_js=self._custom_js,
     )
Пример #25
0
 def _update_args(cls, kw):
     kw['F_'] = get_translator(kw.get('lang', None)).gettext
     kw['html'] = helpers
     return kw
Пример #26
0
 def edit_link():
     model_url = url('models', modelname=modelname)
     return lambda item: '<a href="%(url)s/%(id)s" title="%(label)s" class="icon edit">%(label)s</a>' % dict(
                         url=model_url, id=_pk(item),
                         label=get_translator().gettext('edit'))
Пример #27
0
    def edit(self, modelname, id=None, format='html'):
        """Edit (or create, if `id` is None) an instance of the given model type"""

        saved = 1

        if id and id.endswith('.json'):
            id = id[:-5]
            format = 'json'

        if request.method == 'POST' or format == 'json':
            if id:
                prefix = '%s-%s' % (modelname, id)
            else:
                prefix = '%s-' % modelname

            if request.method == 'PUT':
                items = json.load(request.body_file).items()
                request.method = 'POST'
            elif '_method' not in request.POST:
                items = request.POST.items()
                format = 'json'
            else:
                items = None

            if items:
                for k, v in items:
                    if not k.startswith(prefix):
                        if isinstance(v, list):
                            for val in v:
                                request.POST.add('%s-%s' % (prefix, k), val)
                        else:
                            request.POST.add('%s-%s' % (prefix, k), v)

        fs = self._model_fieldsets[modelname]
        S = self.Session()

        if id:
            instance = S.query(fs.model.__class__).get(id)
            assert instance, id
            title = 'Edit'
        else:
            instance = fs.model.__class__
            title = 'New object'

        if request.method == 'POST':
            F_ = get_translator().gettext
            c.fs = fs.bind(instance, data=request.POST, session=not id and S or None)
            if c.fs.validate():
                c.fs.sync()
                S.flush()
                if not id:
                    # needed if the object does not exist in db
                    if not object_session(c.fs.model):
                        S.add(c.fs.model)
                    message = _('Created %s %s')
                else:
                    S.refresh(c.fs.model)
                    message = _('Modified %s %s')
                S.commit()
                saved = 0

                if format == 'html':
                    message = F_(message) % (modelname.encode('utf-8', 'ignore'),
                                             _pk(c.fs.model))
                    flash(message)
                    redirect(url('models', modelname=modelname))
        else:
            c.fs = fs.bind(instance, session=not id and S or None)

        if format == 'html':
            return self._engine('admin_edit', c=c,
                                        action=title, id=id,
                                        modelname=modelname,
                                        custom_css = self._custom_css,
                                        custom_js = self._custom_js)
        else:
            return self.render_json(fs=c.fs, status=saved, model=modelname)
Пример #28
0
 def edit_link():
     model_url = url('models', modelname=modelname)
     return lambda item: '<a href="%(url)s/%(id)s" title="%(label)s" class="icon edit">%(label)s</a>' % dict(
         url=model_url,
         id=_pk(item),
         label=get_translator().gettext('edit'))
Пример #29
0
 def _update_args(cls, kw):
     kw['F_'] = get_translator(lang=kw.get('lang', None),
                               request=kw.get('request', None))
     kw['html'] = helpers
     return kw
Пример #30
0
 def _update_args(cls, kw):
     kw['F_'] = get_translator(lang=kw.get('lang', None),
                               request=kw.get('request', None))
     kw['html'] = helpers
     return kw
Пример #31
0
    def edit(self, modelname, id=None, format='html'):
        """Edit (or create, if `id` is None) an instance of the given model type"""

        saved = 1

        if id and id.endswith('.json'):
            id = id[:-5]
            format = 'json'

        if request.method == 'POST' or format == 'json':
            if id:
                prefix = '%s-%s' % (modelname, id)
            else:
                prefix = '%s-' % modelname

            if request.method == 'PUT':
                items = json.load(request.body_file).items()
                request.method = 'POST'
            elif '_method' not in request.POST:
                items = request.POST.items()
                format = 'json'
            else:
                items = None

            if items:
                for k, v in items:
                    if not k.startswith(prefix):
                        if isinstance(v, list):
                            for val in v:
                                request.POST.add('%s-%s' % (prefix, k), val)
                        else:
                            request.POST.add('%s-%s' % (prefix, k), v)

        fs = self._model_fieldsets[modelname]
        S = self.Session()

        if id:
            instance = S.query(fs.model.__class__).get(id)
            assert instance, id
            title = 'Edit'
        else:
            instance = fs.model.__class__
            title = 'New object'

        if request.method == 'POST':
            F_ = get_translator().gettext
            c.fs = fs.bind(instance,
                           data=request.POST,
                           session=not id and S or None)
            if c.fs.validate():
                c.fs.sync()
                S.flush()
                if not id:
                    # needed if the object does not exist in db
                    if not object_session(c.fs.model):
                        S.add(c.fs.model)
                    message = _('Created %s %s')
                else:
                    S.refresh(c.fs.model)
                    message = _('Modified %s %s')
                S.commit()
                saved = 0

                if format == 'html':
                    message = F_(message) % (modelname.encode(
                        'utf-8', 'ignore'), _pk(c.fs.model))
                    flash(message)
                    redirect(url('models', modelname=modelname))
        else:
            c.fs = fs.bind(instance, session=not id and S or None)

        if format == 'html':
            return self._engine('admin_edit',
                                c=c,
                                action=title,
                                id=id,
                                modelname=modelname,
                                custom_css=self._custom_css,
                                custom_js=self._custom_js)
        else:
            return self.render_json(fs=c.fs, status=saved, model=modelname)
Пример #32
0
 def edit_link():
     return lambda item: '<a href="%(url)sedit/%(id)s" title="%(label)s" class="icon edit">%(label)s</a>' % dict(
                 url=model_URL, id=_pk(item),
                 label=get_translator().gettext('edit'))