If you don't need this page to be update more then once a day or once a
hour what you can do is this :
You make sub-function that you gonna cache
def __sub_func_NAME():
complex query
return var
def display_func():
var = cache.ram('var',
lambda: __sub_func_samples_list(),
time_expire=3600)
from = RESULT OF YOUR FORM GENERATION
return dict(form=form)
That way you can cache the long query, so it will be slow only once in a
wild...
Sorry, I don't have time to analyse in details if what you are doing could
be optimize. I think that if you just want to make it faster you can follow
the path a suggest as long as your code give you the result you expect.
Richard
On Wed, May 16, 2012 at 4:06 PM, Fabiano Faver <[email protected]> wrote:
> For this purpose they are not...I may include a field on printers table
> that inform the date I searching for.
>
> If what I want to do in this page is still not clear I can try to explain
> more.
> basically its a grid that each TD have a bg-color dependant on it last date
>
>
>
> EmpresaTb = db.define_table("empresa",
> Field('nome_fantasia','string'**),
> format='%(nome_fantasia)s'
> #migrate=False
> )
>
> FilialTb = db.define_table("filial_**empresa",
> Field('descricao_filial','**string'),
> Field('endereco','string'),
> Field('telefone','string'),
> Field('Contato',default=''),
> Field('email','string'),
> Field('id_empresa','reference empresa'),
> format='%(descricao_filial)s',
> migrate=False
> )
>
> FabricanteTb = db.define_table("fabricante",
> Field('nome_fabricante','**string'),
> format='%(nome_fabricante)s'
> #migrate=False
> )
>
> ModeloTb = db.define_table("modelo",
> Field('nome_modelo','string'),
> Field('id_fabricante','**reference fabricante'),
> format='%(nome_modelo)s'
> #migrate=False
> )
>
>
> ImpressoraTb = db.define_table("impressora",
> Field('serial','string'),
> Field('macaddress','string'),
> Field('id_modelo','reference modelo'),
> Field('id_filial_empresa','**reference filial_empresa'),
> format=lambda r: r.serial or r.macaddress
> #migrate=False
> )
>
>
> ContadoresTb = db.define_table("contadores",
> Field('printpb','integer'),
> Field('copypb','integer'),
> Field('printcolor','integer'),
> Field('copycolor','integer'),
> Field('singlecolor','integer')**,
> Field('twocolor','integer'),
> Field('copysinglecolor','**integer'),
> Field('copytwocolor','integer'**),
> Field('scanner','integer'),
> Field('fax','integer'),
> Field('total','integer'),
> Field('data','date'),
> Field('hora','time'),
> Field('id_impressora','**reference impressora')
> #Field('fkempresa','reference empresa'),
> #migrate=False
> )
>
> Em quarta-feira, 16 de maio de 2012 16h50min35s UTC-3, Richard escreveu:
>
>> Would you show your models...
>>
>> You make complexe queries, maybe your models are not pretty well design
>> for the purpose.
>>
>> Richard
>>
>> On Wed, May 16, 2012 at 3:22 PM, Fabiano Faver <[email protected]> wrote:
>>
>>> But because of the group by clause it are too slow and I curious to know
>>> if I can query each company separately do what i must with the data and
>>> show the result on page as soon as they are ready
>>>
>>>
>>> 2012/5/16 Fabiano Faver <[email protected]>
>>>
>>>> I'm trying to display a table with the name of some companies with the
>>>> background color of each TD or DIV dependent of the last day the printers
>>>> company were checked
>>>>
>>>> this it what I have now:
>>>>
>>>> def exibicao_empresas():
>>>> #get companies
>>>> empr = db(auth.accessible_query('**read**', db.empresa,
>>>> auth.user_id)).select()
>>>> tabela_empresa = TABLE( _class='grid_color')
>>>> tr = TR()
>>>> columns = 6
>>>> count_cl = 0
>>>> #for each company get all their printers and the last date it were
>>>> checked
>>>> for td in empr:
>>>> lista_1 = []
>>>> count_menos = count_mais = 0
>>>> #getting printers
>>>> impress = db((db.impressora.id_filial_**em**presa==
>>>> db.filial_empresa.id)**&(**db.filial_empresa.id_**empresa==**td.id<http://td.id/>
>>>> ))._select(db.**impressora.**id <http://db.impressora.id/>)
>>>>
>>>> quant_impressoras = len(impress)
>>>> maxdata = db.contadores.data.max()
>>>> #getting dates
>>>> dias =
>>>> db(db.contadores.id_**impressora**.belongs(impress)).**select(
>>>> maxdata,db.contadores.id_**impre**ssora, groupby=db.contadores.id_**
>>>> impre**ssora)
>>>>
>>>> # checking to show the indicative background-color
>>>> for dia in dias:
>>>> if (((dia_hoje-dia[maxdata]).days >= 1) and
>>>> ((dia_hoje-dia[maxdata]).days < 5)): count_menos = count_menos+1
>>>> if ((dia_hoje-dia[maxdata]).days > 5): count_mais =
>>>> count_mais+1
>>>> bg_td = 'background-color: #99FFCC'
>>>> if count_menos: bg_td = 'background-color: #EAEA9F'
>>>> if count_mais == len(dias): bg_td = 'background-color: #FF9999'
>>>>
>>>> tr.append(TD(td.nome_fantasia, _style = bg_td))
>>>> count_cl = count_cl + 1
>>>> if count_cl==columns:
>>>> tabela_empresa.append(tr)
>>>> tr=TR()
>>>> else:
>>>> if len(tr): tabela_empresa.append(tr)
>>>>
>>>> return dict(tabela_empresa =tabela_empresa )
>>>>
>>>>>
>>>>>
>>>
>>