Commit 6efc2d3ccd7e546e869c89fa6418bdfebd627e17
1 parent
ee3558b5
Exists in
master
contagem campo da colta
Showing
5 changed files
with
123 additions
and
5 deletions
Show diff stats
wscacicneo/__init__.py
@@ -28,6 +28,7 @@ def main(global_config, **settings): | @@ -28,6 +28,7 @@ def main(global_config, **settings): | ||
28 | cfg.add_route('root', '/') | 28 | cfg.add_route('root', '/') |
29 | 29 | ||
30 | cfg.add_route('home', 'home') | 30 | cfg.add_route('home', 'home') |
31 | + cfg.add_route('error', 'error') | ||
31 | cfg.add_route('graficop', 'graficop') | 32 | cfg.add_route('graficop', 'graficop') |
32 | cfg.add_route('notifications', 'notifications') | 33 | cfg.add_route('notifications', 'notifications') |
33 | cfg.add_route('admin', 'admin') | 34 | cfg.add_route('admin', 'admin') |
wscacicneo/model/reports.py
@@ -25,18 +25,62 @@ class Reports(): | @@ -25,18 +25,62 @@ class Reports(): | ||
25 | self.rest_url = config.REST_URL | 25 | self.rest_url = config.REST_URL |
26 | else: | 26 | else: |
27 | self.rest_url = rest_url | 27 | self.rest_url = rest_url |
28 | - self.base = coleta_manual.ColetaManualBase(nm_base, self.rest_url).lbbase | 28 | + self.coleta_manual_base = coleta_manual.ColetaManualBase(nm_base, self.rest_url) |
29 | + self.base = self.coleta_manual_base.lbbase | ||
29 | print(type(self.base)) | 30 | print(type(self.base)) |
30 | self.documentrest = DocumentREST(self.rest_url, self.base, response_object=True) | 31 | self.documentrest = DocumentREST(self.rest_url, self.base, response_object=True) |
31 | 32 | ||
32 | 33 | ||
33 | def get_base_orgao(self): | 34 | def get_base_orgao(self): |
34 | """ | 35 | """ |
35 | - retorna todos os documentos da base | 36 | + Retorna todos os documentos da base |
36 | """ | 37 | """ |
38 | + # A resposta nao pode ser object aqui | ||
39 | + self.documentrest.response_object = False | ||
37 | search = Search( | 40 | search = Search( |
38 | limit=None | 41 | limit=None |
39 | ) | 42 | ) |
40 | get = self.documentrest.get_collection(search_obj=search) | 43 | get = self.documentrest.get_collection(search_obj=search) |
41 | 44 | ||
42 | return get | 45 | return get |
46 | + | ||
47 | + def get_attribute(self, attr): | ||
48 | + """ | ||
49 | + Testa recuperar atributo do Documento | ||
50 | + """ | ||
51 | + # A resposta nao pode ser object aqui | ||
52 | + self.documentrest.response_object = False | ||
53 | + | ||
54 | + # FIXME: Adicionar lista de atributos obrigatórios nos campos que vao retornar na busca | ||
55 | + # Referência: http://dev.lightbase.cc/projects/liblightbase/repository/revisions/master/entry/liblightbase/lbbase/content.py#L34 | ||
56 | + | ||
57 | + # A busca deve obrigatoriamente retornar todos os atributos obrigatórios | ||
58 | + search = Search( | ||
59 | + limit=None, | ||
60 | + select=[attr, "data_coleta"] | ||
61 | + ) | ||
62 | + get = self.documentrest.get_collection(search_obj=search) | ||
63 | + | ||
64 | + return get | ||
65 | + | ||
66 | + def count_attribute(self, attr, child=None): | ||
67 | + """ | ||
68 | + retorna dicionário de atributos agrupados por contador | ||
69 | + """ | ||
70 | + attr_dict = self.get_attribute(attr) | ||
71 | + results = attr_dict.results | ||
72 | + | ||
73 | + saida = dict() | ||
74 | + for elm in results: | ||
75 | + if child: | ||
76 | + parent = getattr(elm, attr) | ||
77 | + attribute = getattr(parent, child) | ||
78 | + else: | ||
79 | + attribute = getattr(elm, attr) | ||
80 | + | ||
81 | + if saida.get(attribute): | ||
82 | + saida[attribute] = saida.get(attribute) + 1 | ||
83 | + else: | ||
84 | + saida[attribute] = 1 | ||
85 | + | ||
86 | + return saida |
@@ -0,0 +1,45 @@ | @@ -0,0 +1,45 @@ | ||
1 | +<metal:main use-macro="load: master.pt"> | ||
2 | + <metal:content fill-slot="conteudo"> | ||
3 | +<div class="container"> | ||
4 | + | ||
5 | + <div class="row"> | ||
6 | + <div class="col-md-12"> | ||
7 | + <!-- Widget starts --> | ||
8 | + <div class="widget"> | ||
9 | + <!-- Widget head --> | ||
10 | + <div class="widget-head"> | ||
11 | + <i class="fa fa-question-circle"></i> Error | ||
12 | + </div> | ||
13 | + | ||
14 | + <div class="widget-content"> | ||
15 | + <div class="padd error"> | ||
16 | + | ||
17 | + <h1>Opps!!! It's 404</h1> | ||
18 | + <p>Aliquam consequat, purus vitae auctor ullamcorper, sem velit convallis quam, a pharetra justo nunc et mauris. </p> | ||
19 | + <br> | ||
20 | + | ||
21 | + <div class="input-group input-group-width"> | ||
22 | + <input type="text" class="form-control"> | ||
23 | + <span class="input-group-btn"> | ||
24 | + <button class="btn btn-default" type="button">Search</button> | ||
25 | + </span> | ||
26 | + </div> | ||
27 | + | ||
28 | + <br> | ||
29 | + <div class="horizontal-links"> | ||
30 | + <a href="index.html">Home</a></div> | ||
31 | + </div> | ||
32 | + <div class="widget-foot"> | ||
33 | + <!-- Footer goes here --> | ||
34 | + </div> | ||
35 | + </div> | ||
36 | + </div> | ||
37 | + </div> | ||
38 | + </div> | ||
39 | + </div> | ||
40 | + </metal:content> | ||
41 | + <metal:content fill-slot="javascript"> | ||
42 | + <script type="text/javascript"> | ||
43 | + </script> | ||
44 | + </metal:content> | ||
45 | +</metal:main> |
wscacicneo/test/test_reports.py
@@ -3,11 +3,12 @@ | @@ -3,11 +3,12 @@ | ||
3 | __author__ = 'eduardo' | 3 | __author__ = 'eduardo' |
4 | 4 | ||
5 | import unittest | 5 | import unittest |
6 | +import json | ||
6 | from wscacicneo.model import reports | 7 | from wscacicneo.model import reports |
7 | from liblightbase.lbbase.struct import Base | 8 | from liblightbase.lbbase.struct import Base |
8 | from liblightbase.lbutils import conv | 9 | from liblightbase.lbutils import conv |
9 | 10 | ||
10 | -class TestOrgaoBase(unittest.TestCase): | 11 | +class TestRelatorio(unittest.TestCase): |
11 | """ | 12 | """ |
12 | Testa base do órgão no LB | 13 | Testa base do órgão no LB |
13 | """ | 14 | """ |
@@ -22,8 +23,34 @@ class TestOrgaoBase(unittest.TestCase): | @@ -22,8 +23,34 @@ class TestOrgaoBase(unittest.TestCase): | ||
22 | """ | 23 | """ |
23 | Testa busca o documento completo da base | 24 | Testa busca o documento completo da base |
24 | """ | 25 | """ |
25 | - get_doc = reports.Reports(self.rest_url, self.nm_base) | ||
26 | - lbbase = get_doc.get_base_orgao | 26 | + get_doc = reports.Reports(self.nm_base, self.rest_url) |
27 | + lbbase = get_doc.get_base_orgao() | ||
28 | + self.assertGreater(len(lbbase.results), 0) | ||
29 | + | ||
30 | + def test_get_attribute(self): | ||
31 | + """ | ||
32 | + Teste recuperar um atributo específico da base | ||
33 | + """ | ||
34 | + get_doc = reports.Reports(self.nm_base, self.rest_url) | ||
35 | + coleta = get_doc.get_base_orgao() | ||
36 | + hd = get_doc.get_attribute('hd') | ||
37 | + self.assertGreater(len(hd.results), 0) | ||
38 | + | ||
39 | + def test_count_attribute(self): | ||
40 | + """ | ||
41 | + Método que retora um dicionário de atributos agrupados com o valor | ||
42 | + de ocorrência de cada um deles | ||
43 | + """ | ||
44 | + get_doc = reports.Reports(self.nm_base, self.rest_url) | ||
45 | + coleta = get_doc.get_base_orgao() | ||
46 | + hd = get_doc.get_attribute('hd') | ||
47 | + self.assertGreater(len(hd.results), 0) | ||
48 | + | ||
49 | + hd_count = get_doc.count_attribute('hd', 'tipo_hd') | ||
50 | + fd = open('/tmp/teste.json', 'w+') | ||
51 | + fd.write(json.dumps(hd_count)) | ||
52 | + fd.close() | ||
53 | + self.assertGreater(len(hd_count.keys()), 0) | ||
27 | 54 | ||
28 | def tearDown(self): | 55 | def tearDown(self): |
29 | """ | 56 | """ |
wscacicneo/utils/utils.py