Mudancas na ordem de execucao dos models

93 views
Skip to first unread message

Bruno Rocha

unread,
May 1, 2011, 11:15:17 PM5/1/11
to web2py-us...@googlegroups.com
Pessoal, estamos discutindo na lista de developers ( e agora testando) uma mudanca importante no web2py.

Esta mudanca afeta a ordem de execucao dos models, hoje todo sabemos que o web2py permite apenas models dentro da pasta /app/models/ e que estes arquivos são sempre executados em ordem alfabética,
muitas vezes temos uma grande app com muitos arquivos de models e nem sempre queremos que todos sejam executados e colocados na memória.

Para isso depois de algumas discussões e idéias chegamos a este modelo:


models/general.py # Este model e todos os da pasta raiz serão sempre executados colocando tudo o que for definido ai na memória

models/default/something.py # Este model e todos da mesma pasta serão executados apenas quando requisitarmos http://..../app/default/* 

models/default/index/something.py # Este model e todos da mesma pasta serão executados apenas quando requisitarmos http://..../app/default/index is requested

models/default/contact/something.py # Este model e todos da mesma pasta serão executados apenas quando requisitarmos http://..../app/default/contact is requested

Imagine uma aplicaćão bem grande com muitas tabelas definidas e também com muitos objetos e validadores definidos nos models, não vamos querer colocar tudo isso na memória sempre que houver uma requisićão, por exemplo, models da página de 'contatos' não precisam ser carregados sempre que outras páginas forem requisitadas.

Ainda estamos testando essa mudanca.

--
Bruno Rocha

Gilson Filho

unread,
May 1, 2011, 11:18:28 PM5/1/11
to web2py-us...@googlegroups.com
Estou testando aqui, e pelo menos aqui está funcionando perfeitamente.
_____________________________________________
Gilson Filho
Web Developer
http://gilsondev.com

Bruno Barbosa

unread,
May 1, 2011, 11:23:20 PM5/1/11
to web2py-us...@googlegroups.com
Excelentes modificações...

Com certeza irá melhorar e muito o desempenho de grandes aplicações.

# ---------------------------------------
# Bruno Barbosa
# Seja livre - Use Linux!!!
# http://algoritmizando.com
# http://twitter.com/bruninbsb
# ---------------------------------------


--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-us...@googlegroups.com
Para se desinscrever, envie email a: web2py-users-br...@googlegroups.com
Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en

Savio Sabino

unread,
May 2, 2011, 7:42:37 AM5/2/11
to web2py-users-brazil
Maravilha. Isso é muito bom.
Vou falar algo que pode ser fora do assunto mas que tem ligação quanto
à maturidade do framework quanto ao tratamento de dados.
Acho que um próximo passo, seria criar um gerador de models baseado em
um bd. Ou seja, informa-se o bd, ou algumas tabelas do db para gerar o
model, ou, que nem tenha a necessidade de gerar, usando as tabelas
dinamicamente.
Não sei se já existe algo do tipo, se tiver, por favor alguém me
avise. Sei que no sqlAlchemy tem as duas opçoes (gerar código ou usar
tabelas sem criar o model) podendo escolher o banco todo ou algumas
tabelas. Isso é interessante quando se vai participar de um projeto em
que já existe um sistema com centenas de tabelas (ex: ERP) e precisa
fazer algum(ns) módulos com web2py.


On 2 maio, 00:15, Bruno Rocha <rochacbr...@gmail.com> wrote:
> Pessoal, estamos discutindo na lista de developers ( e agora testando) uma
> mudanca importante no web2py.
>
> Esta mudanca afeta a ordem de execucao dos models, hoje todo sabemos que o
> web2py permite apenas models dentro da pasta /app/models/ e que estes
> arquivos são sempre executados em ordem alfabética,
> muitas vezes temos uma grande app com muitos arquivos de models e nem sempre
> queremos que todos sejam executados e colocados na memória.
>
> Para isso depois de algumas discussões e idéias chegamos a este modelo:
>
> *models/general.py* # Este model e todos os da pasta raiz serão sempre
> executados colocando tudo o que for definido ai na memória
>
> *models/default/something.py* # Este model e todos da mesma pasta serão
> executados apenas quando requisitarmoshttp://..../app/default/*
>
> *models/default/index/something.py* # Este model e todos da mesma pasta
> serão executados apenas quando requisitarmoshttp://..../app/default/index
> is requested
>
> *models/default/contact/something.py* # Este model e todos da mesma pasta
> serão executados apenas quando requisitarmoshttp://..../app/default/contact

Gilson Filho

unread,
May 2, 2011, 8:13:00 AM5/2/11
to web2py-us...@googlegroups.com
Isso seria interessante em bancos de dados já existentes. Agora para projetos novos, não teria sentido partir do banco de dados para isso.

_____________________________________________
Gilson Filho
Web Developer
http://gilsondev.com



Savio Sabino

unread,
May 2, 2011, 9:06:32 AM5/2/11
to web2py-users-brazil
então Gilson, a idéia é exatamente para bancos já existentes mesmo.
Vejo que a organização dos models seria em primeiro lugar, visto que
interfere em novos e antigos desenvolvimentos. E já está a caminho. E
em segundo lugar o suporte a tabelas existentes seria interessante.


On 2 maio, 09:13, Gilson Filho <cont...@gilsondev.com> wrote:
> Isso seria interessante em bancos de dados já existentes. Agora para
> projetos novos, não teria sentido partir do banco de dados para isso.
> _____________________________________________
> *Gilson Filho*
> *Web Developerhttp://gilsondev.com*

Carlos Costa

unread,
May 2, 2011, 9:54:18 PM5/2/11
to web2py-us...@googlegroups.com
Dúvida: e para models que são compartilhados a única opção é colocar na models/ e será carregado sempre?
--
Carlos J. Costa
Cientista da Computação
Esp. Gestão em Telecom

EL MELECH NEEMAN!
אָמֵן


contatog...@gmail.com

unread,
May 3, 2011, 8:56:06 AM5/3/11
to web2py-us...@googlegroups.com
Isso é relativo. Se o modelo que está compartilhado pode ser usado em toda a aplicação, fica na raiz. Caso ela seja usada somente em um determinado controller, fica na pasta com o nome do controller. Agora se é usado somente em uma action, então coloca na pasta como o nome da action. Simples assim.

_____________________________________________
Gilson Filho


Carlos Costa

unread,
May 3, 2011, 10:06:18 PM5/3/11
to web2py-us...@googlegroups.com
Entendi.
Mas a minha dúvida é no caso de um model que seja usado exporadicamente em diferentes controllers e actions.
A primeira vista ele ficaria na pasta geral.
Porém se for um model que é usado extensivamente em um controller e é usado uma vez em uma action de outro controller.
Nesse caso a única opção seria move-la da pasta específica para a pasta geral?

Bruno Rocha

unread,
May 3, 2011, 10:56:34 PM5/3/11
to web2py-us...@googlegroups.com

Sao 3 niveis de escopo

Geral todos veem
Controller todas function veem
Function apenas a function ve

Em 03/05/2011 23:06, "Carlos Costa" <yamand...@gmail.com> escreveu:
> Entendi.
> Mas a minha dúvida é no caso de um model que seja usado exporadicamente em
> diferentes controllers e actions.
> A primeira vista ele ficaria na pasta geral.
> Porém se for um model que é usado extensivamente em um controller e é usado
> uma vez em uma action de outro controller.
> Nesse caso a única opção seria move-la da pasta específica para a pasta
> geral?
>
> Em 3 de maio de 2011 09:56, contatog...@gmail.com <
> contatog...@gmail.com> escreveu:
>
>> Isso é relativo. Se o modelo que está compartilhado pode ser usado em toda
>> a aplicação, fica na raiz. Caso ela seja usada somente em um determinado
>> controller, fica na pasta com o nome do controller. Agora se é usado somente
>> em uma action, então coloca na pasta como o nome da action. Simples assim.
>> _____________________________________________
>> *Gilson Filho*
>> *Web Developer

Vinicius Assef

unread,
May 4, 2011, 5:39:32 PM5/4/11
to web2py-us...@googlegroups.com
Mudança interessante, mas temo a pulverização de código pra controlar
a carga dos models.

Não consegui pensar em nada pra melhorar, mas se pulverizar muito,
vamos perder a facilidade de encontrar as coisas.

Teoricamente, quanto maior o sistema, mais integrado ele é. E as
partes integradas ficam cada vez mais dentro dos meandros dos app. Por
exemplo: venda de produto mexe com cliente, crédito, contas a pagar,
estoque, vendedor, comissões, caixa, etc.

As partes que são integradas podem ficar sobrecarregadas de código. Ou
imports funcionariam para promover o DRY e ajudar a diminuir
quantidade de código?

Por exemplo: no controller de venda exemplificado acima, teríamos:
import cliente, credito, contas_a_pagar, estoque, vendedor, caixa ?

Se puder fazer algo assim, eu poderia escolher o que carregar em que
momento, só fazendo imports. ;-)

A ideia é essa ou viajei muito?

--
Vinicius Assef.


2011/5/3 Bruno Rocha <rocha...@gmail.com>:

Bruno Rocha

unread,
May 4, 2011, 5:58:34 PM5/4/11
to web2py-us...@googlegroups.com
O Massimo acabou de anunciar uma mudanca que melhora tudo, agora temos thread locals, ou seja, os modulos enxergam tudo, isso quer dizer que os models em subpastas são importantes principalmente quando trabalhamos com web2py_components e ajax requests (para nao ter que carregar tudo de novo a cada request). 

mas no caso de functions compartilhada agora podemos usar a nova funcionalidade

exemplo:

na pasta modules colocamos um arquivo vendas.py
----vendas.py-----

def carregar_produtos(id_venda):
    from gluon import current
    return current.db(current.db.vendas).select()

------------------------

Em qualquer controller, model ou view (não faca isso na view!)

--- controller default.py -------

def index():
    import vendas
    table = SQLTABLE(vendas.carregar_produtos(234))
    return locals()
------------------------------

Enfim, vamos aproveitar models para os dados e usar mais modules para nossas funcões!

    
--
Bruno Rocha



2011/5/4 Vinicius Assef <vinic...@gmail.com>

contatog...@gmail.com

unread,
May 4, 2011, 6:56:27 PM5/4/11
to web2py-us...@googlegroups.com
Ficou bom agora. Com isso posso criar modulos que ficam responsaveis por determinadas persistências, e isso deixa as actions mais enxutas. Só não entendi uma coisa: o que posso fazer com o current?

_____________________________________________
Gilson Filho


Bruno Barbosa

unread,
Aug 31, 2011, 1:42:12 PM8/31/11
to web2py-us...@googlegroups.com
Bruno Rocha,

Sabe me dizer se essas alterações já estão implementadas na versão stable do web2py?

# ---------------------------------------
# Bruno Barbosa
# Web Developer - Linux user and Free Software Enthusiast

# http://algoritmizando.com
# http://twitter.com/bruninbsb
# ---------------------------------------


Em 4 de maio de 2011 18:58, Bruno Rocha <rocha...@gmail.com> escreveu:

Bruno Rocha

unread,
Aug 31, 2011, 1:50:50 PM8/31/11
to web2py-us...@googlegroups.com
Sim, já está funcionando.. eu tenho usado muito para implementar ajax callbacks.

Duas novidades boas, conditional models e o novo custom_importer.

Para a próxima versão teremos o novo scheduller (tipo Celery) e o grid/smartgrid, e também uma nova maneira para detectar dispositivos móveis.

Também está em discussão outras coisas interessantes entre elas:

API para estender a classe Table
API para criar Fields atraves de templates (herença)

redirect(local=True) para fazer redirecionamento local sem alterar a url do navegador.

 
--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-us...@googlegroups.com
Para se desinscrever, envie email a: web2py-users-br...@googlegroups.com
Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en

--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-us...@googlegroups.com
Para se desinscrever, envie email a: web2py-users-br...@googlegroups.com
Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en


--



--
Bruno Rocha
[ Aprenda a programar: http://CursoDePython.com.br ]
[ O seu aliado nos cuidados com os animais: http://AnimalSystem.com.br ]
[ Consultoria em desenvolvimento web: http://www.blouweb.com ]

Bruno Barbosa

unread,
Aug 31, 2011, 2:00:45 PM8/31/11
to web2py-us...@googlegroups.com
Muito bom tudo isso... inclusive essa última, do redirect... irei usar muito =D

Estou voltando a ativa agora, no web2py e na lista, depois de algum tempo dedicado somente ao Plone. Agora tenho que me atualizar rsrsrs...

Abraços.

# ---------------------------------------
# Bruno Barbosa
# Web Developer - Linux user and Free Software Enthusiast
# http://algoritmizando.com
# http://twitter.com/bruninbsb
# ---------------------------------------


Ovidio Marinho

unread,
Aug 31, 2011, 2:10:45 PM8/31/11
to web2py-us...@googlegroups.com
Isto sera documentado, pois quem entra agora entra meio perdido. como estao mexendo na base seria bom rever a documentacao.
      


       Ovidio Marinho Falcao Neto
             ovid...@gmail.com
               83   8826 9088 - Oi
             83   9334 0266 - Claro
                   Paraiba-Brasil



Em 2 de maio de 2011 00:15, Bruno Rocha <rocha...@gmail.com> escreveu:

Bruno Rocha

unread,
Aug 31, 2011, 2:48:10 PM8/31/11
to web2py-us...@googlegroups.com
Não é fácil desenvolver, testar, responder questões e ainda manter um trabalho/estudo. Atualmente se vocês repararem no hg[0] são 9 pessoas e dentre essas 9 apenas umas 3 ou 4 desenvolvem e submetem patches com frequência[1]. Tem bastante gente que ajuda testando e reportando os bugs[2]. Mas no fim das contas o trabalho duro mesmo é por a mão no código e garantir que funcione sem quebrar a compatibilidade e a API.

Até onde sei o Massimo está também trabalhando na versão 4 do livro que acredito que deva sair lá para Outubro, as vezes algumas pessoas ajudam a atualizar o /book (qualquer um pode ajudar nisso) mas também são poucos acho que umas 4 pessoas com frequência.

A verdade é que precisamos de mais gente que se divirta com web2py, que goste de dedicar algumas horas da semana estudando o código fonte e implementando/testando algo novo. quanto mais gente ajudando e submetendo melhorias mais tempo sobrará para documentar. A tarefa de documentar também não é fácil. ( eu particularmente acho mais dificil documentar do que desenvolver, tanto que os plugins que eu criei quase não tem documentação :P )

Estou aos poucos trabalhando no projeto do web2pyslices novo, gostaria de termina-lo antes do final do mês, e ai incluirá um wiki e o pyforum[3] integrado.

--



--
Bruno Rocha

Rodrigo attique santana

unread,
Nov 26, 2016, 4:25:46 PM11/26/16
to web2py-users-brazil
Compartilhar mesmo model para vários apps
Boa noite a todos, sei que o topico já esta antigo, porém a dúvida esta relacionado ao desempenho.
Gostaria de saber se existe a possibilidade de compartilhar o mesmo model entre dois apps diferentes, assim teriamos um appBase, appFinanceiro, appVendas etc.
Já utilizei isto em JAVA, em python puro também (POO) mas utilizando o web2py não consigo imaginar como, se é que é possível.

Carlos Costa

unread,
Nov 27, 2016, 11:41:22 AM11/27/16
to web2py-us...@googlegroups.com
Só se você criar um app model-less
E no módulo importar outro módulo com as definições.

Eu acho! hehe

--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-users-brazil@googlegroups.com
Para se desinscrever, envie email a: web2py-users-brazil+unsub...@googlegroups.com

Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsub...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--


Carlos J. Costa
Cientista da Computação  | BS Computer Science
Esp. Gestão em Telecom   |
PgC Telecom Mangement
<º))><

Marlysson Silva

unread,
Nov 27, 2016, 1:00:43 PM11/27/16
to web2py-users-brazil
Essa thread apareceu como ativa pensei que era uma funcionalidade nova , mas ela é datada de 2011 hmm .. então essa funcionalidade já existe há tempos então..posso separar os models por controller e views que serão carregadas on the fly..

Carlos Costa

unread,
Nov 28, 2016, 5:48:57 AM11/28/16
to web2py-us...@googlegroups.com
Sim. Já tem uns tempos.
Mas eu tenho preferido usar o recurso de lazy_tables.

--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-users-brazil@googlegroups.com
Para se desinscrever, envie email a: web2py-users-brazil+unsub...@googlegroups.com
Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsub...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Márcio Almeida

unread,
Dec 2, 2016, 4:37:38 PM12/2/16
to web2py-users-brazil
Ideia interessante mas tenho uma dúvida, o lazy_table=True não faz o carregamento sob demanda do model?

Carlos Costa

unread,
Dec 5, 2016, 5:40:05 AM12/5/16
to web2py-us...@googlegroups.com
Sim. Na verdade os objetos serão instanciados mas as tarefas que ele realiza no banco de dados só serão executadas quando necessário, como criação da tabela, migration, etc.
Como está escrito no próprio livro:  This is one of the most significant response-time performance boosts in web2py.
Esse é um dos mais significantes ganhos de performance em tempo de resposta no web2py.

Mas separar os models tem a vantagem de deixar eles mais organizados também.

Em 2 de dezembro de 2016 19:37, Márcio Almeida <marciolauri...@gmail.com> escreveu:
Ideia interessante mas tenho uma dúvida, o  lazy_table=True não faz o carregamento sob demanda do model?
--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-users-brazil@googlegroups.com
Para se desinscrever, envie email a: web2py-users-brazil+unsub...@googlegroups.com
Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você está recebendo esta mensagem porque se inscreveu no grupo "web2py-users-brazil" dos Grupos do Google.

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsub...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages