Hi,

I think I have found the (hope it's the bug, not a bug ;)).

Would you mind trying attached pathches (newcontroller.py.diff and decorator.py.diff).

Thanks.

Simon

Jorge Godoy wrote:
Simon Belak <[EMAIL PROTECTED]> writes:

Interesting. Would you mind posting (privately or here, whichever you prefer)
the relevant controller code.

Thnaks,
Simon

Sure, I don't mind passing it here.

The code in question is (don't mind it is just a "draft" yet, it is where I
try widgets and etc., coming from TG 0.8a3 up to the newest svn revision ;-)):

================================================================================
    @turbogears.expose(inputform = formulario_clientes)
    @identity.require(identity.conditions.in_any_group('latam_novo', 'admin'))
    def save(self, cliente_id, nome_abreviado=None, nome_completo=None,
             contrato=None, contrato_assinatura=None,
             contrato_vencimento=None, auto_renovar=False, is_ativo=False,
             endereco=None, cidade=None, estado=None, cep=None, cnpj=None,
             ie=None, cpf=None, contato=None, email=None, fone=None,
             fax=None, tg_errors = None):

#         if cherrypy.request.form_errors:
#             flashData = {"status": "error", "msg": _("Erro no preenchimento dos 
dados")}
#             turbogears.flash(json.write(jsonify(flashData)))
#             return self.index()

        agora = datetime.datetime.now()

        erro = None
        try:
            model.hub.begin()
            cliente = model.Cliente(
                nomeAbreviado = nome_abreviado,
                nomeCompleto = nome_completo,
                isAtivo = is_ativo,
                endereco = endereco,
                cidade = cidade,
                estado = estado,
                cep = cep,
                cnpj = cnpj,
                ie = ie,
                cpf = cpf,
                fone = fone,
                fax = fax,
                email = email,
                contato = contato,
                condicaoPagamento = 0,
                contrato = None,
                tabelaID = 1,
                incluidoPor = identity.current.user,
                incluidoEm = agora,
                alteradoPor = identity.current.user,
                alteradoEm = agora,
                )

            if contrato:
                _contrato = model.Contrato(
                    contrato = contrato,
                    autoRenovar = auto_renovar,
                    dataAssinatura = contrato_assinatura,
                    dataVencimento = None,
                    incluidoPor = identity.current.user,
                    incluidoEm = agora,
                    alteradoPor = identity.current.user,
                    alteradoEm = agora,
                    )

                if contrato_vencimento != '':
                    _contrato.dataVencimento=contrato_vencimento

                _contrato.sync()

                cliente.contrato = _contrato,
                cliente.sync()

            model.hub.commit()
        except model.Cliente._connection.module.ProgrammingError, error:
            erro = error

        model.hub.end()

        if erro is not None:
            flashData = {"status": "error", "msg": str(erro)}
            turbogears.flash(json.write(jsonify(flashData)))
        else:
            flashData = {"status": "success", "msg": _("Registro cadastrado no banco 
de dados!")}
            turbogears.flash(json.write(jsonify(flashData)))

        raise cherrypy.HTTPRedirect(turbogears.url("/clientes/"))
================================================================================

And my template is:

================================================================================
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-t
ransitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"; py:extends="'master.kid'" 
xmlns:py="http://purl.org/kid/ns#";>
  <head>
    <title>Cadastro de Amostras</title>
    <script language="JavaScript" src="/tg_widgets/turbogears.widgets/calendar.js"> 
</script>
    <script language="JavaScript" 
src="/tg_widgets/turbogears.widgets/lang/calendar-pt-utf8.js"> </script>
    <script language="JavaScript" 
src="/tg_widgets/turbogears.widgets/calendar-setup.js"> </script>
    <link href="/tg_widgets/turbogears.widgets/calendar-system.css" type="text/css" 
rel="stylesheet"> </link>
  </head>
  <body>
    <div id="mainbar">
      <div py:def="intro()"> </div>

      <?python
      from turbogears.i18n.format import format_date
      ?>

      <h1>Clientes</h1>

      <div py:if='len(clientes) > 0' align="center">
        <p><b>ATENÇÃO</b>: apenas clientes sem quaisquer dados associados a eles
        podem ser removidos.  Para tornar um cliente indisponível para acesso e
        entrada de dados, desmarque-o como ativo.</p>

        <span py:replace="grid_clientes.insert(tudo_clientes, add_link_title = 
add_link_title, show_add_
link = False)" />
        <p align='center'><a href='/clientes/ContratosVencendo/'>Relação de 
contratos que
        vencem nos próximos 7 dias</a></p>
      </div>
      <p align='center'><a href='/'>Retornar à página principal</a></p>

      <p py:if="usuario">Os campos assinalados com um círculo vermelho devem
      obrigatoriamente conter um valor tanto para o cadastro quanto para a
      atualização de informações.</p>

      <div py:if="cliente_id and usuario">
        <br />
        <h1>Editar cliente</h1>
        <span py:replace="formulario.insert(data, action='/clientes/update', method = 
'post')" />
        <a href='/'>Retornar à página principal</a>
      </div>

      <div py:if="usuario">
        <br />
        <h1>Novo cliente</h1>
        <span py:replace="formulario.insert(data_new, action='/clientes/save')" 
/>
        <a href='/'>Retornar à página principal</a>
      </div>
    </div>
  </body>
</html>
================================================================================



Index: newcontrollers.py
===================================================================
--- newcontrollers.py   (revision 618)
+++ newcontrollers.py   (working copy)
@@ -225,8 +225,8 @@
 def _remove_excess_args(func, kw):
     """ Remove all excess arguments.  """
     argnames, varargs, kwargs = inspect.getargspec(func)[:-1]
-    if kwargs is None:
-        kw = dict(ifilter(lambda (key, _): key in argnames, kw.iteritems()))
+    if kwargs in (None, "tg_kw"):
+        kw = dict(ifilter(lambda (key, val): key in argnames, kw.iteritems()))
     return kw

 def _execute_func(self, func, tg_format, html, fragment, **kw):
Index: decorator.py
===================================================================
--- decorator.py        (revision 618)
+++ decorator.py        (working copy)
@@ -9,8 +9,9 @@
     """ Decorates function with caller preserving original signature.  """
     def entangle(func):
         argnames, varargs, kwargs, defaults = getargspec(func)
+        # Argument sink
         if kwargs is None:
-            kwargs = "kw"
+            kwargs = "tg_kw"
         counter = itertools.count()
         full_sign = formatargspec(argnames, varargs, kwargs, defaults,
                         formatvalue=lambda value: "=defaults[%i]" % (

Reply via email to