Commit 30e191f6b09366b498688228f72831e7956faf8b
Exists in
master
merge
Showing
6 changed files
with
130 additions
and
8 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') |
@@ -92,4 +93,4 @@ def main(global_config, **settings): | @@ -92,4 +93,4 @@ def main(global_config, **settings): | ||
92 | cfg.add_route('confighome','confighome') | 93 | cfg.add_route('confighome','confighome') |
93 | cfg.add_route('db','db') | 94 | cfg.add_route('db','db') |
94 | cfg.scan() | 95 | cfg.scan() |
95 | - return cfg.make_wsgi_app() | ||
96 | \ No newline at end of file | 96 | \ No newline at end of file |
97 | + return cfg.make_wsgi_app() |
wscacicneo/model/reports.py
@@ -25,15 +25,18 @@ class Reports(): | @@ -25,15 +25,18 @@ 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 | ) |
@@ -82,4 +85,44 @@ class Reports(): | @@ -82,4 +85,44 @@ class Reports(): | ||
82 | Apaga os dados de coleta | 85 | Apaga os dados de coleta |
83 | """ | 86 | """ |
84 | coleta = self.documentrest.update(id) | 87 | coleta = self.documentrest.update(id) |
85 | - return coleta | ||
86 | \ No newline at end of file | 88 | \ No newline at end of file |
89 | + return coleta | ||
90 | + def get_attribute(self, attr): | ||
91 | + """ | ||
92 | + Testa recuperar atributo do Documento | ||
93 | + """ | ||
94 | + # A resposta nao pode ser object aqui | ||
95 | + self.documentrest.response_object = False | ||
96 | + | ||
97 | + # FIXME: Adicionar lista de atributos obrigatórios nos campos que vao retornar na busca | ||
98 | + # Referência: http://dev.lightbase.cc/projects/liblightbase/repository/revisions/master/entry/liblightbase/lbbase/content.py#L34 | ||
99 | + | ||
100 | + # A busca deve obrigatoriamente retornar todos os atributos obrigatórios | ||
101 | + search = Search( | ||
102 | + limit=None, | ||
103 | + select=[attr, "data_coleta"] | ||
104 | + ) | ||
105 | + get = self.documentrest.get_collection(search_obj=search) | ||
106 | + | ||
107 | + return get | ||
108 | + | ||
109 | + def count_attribute(self, attr, child=None): | ||
110 | + """ | ||
111 | + retorna dicionário de atributos agrupados por contador | ||
112 | + """ | ||
113 | + attr_dict = self.get_attribute(attr) | ||
114 | + results = attr_dict.results | ||
115 | + | ||
116 | + saida = dict() | ||
117 | + for elm in results: | ||
118 | + if child: | ||
119 | + parent = getattr(elm, attr) | ||
120 | + attribute = getattr(parent, child) | ||
121 | + else: | ||
122 | + attribute = getattr(elm, attr) | ||
123 | + | ||
124 | + if saida.get(attribute): | ||
125 | + saida[attribute] = saida.get(attribute) + 1 | ||
126 | + else: | ||
127 | + saida[attribute] = 1 | ||
128 | + | ||
129 | + 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
wscacicneo/views.py
@@ -191,6 +191,10 @@ def editorgao(request): | @@ -191,6 +191,10 @@ def editorgao(request): | ||
191 | def configcoleta(request): | 191 | def configcoleta(request): |
192 | return {'project': 'WSCacicNeo'} | 192 | return {'project': 'WSCacicNeo'} |
193 | 193 | ||
194 | +@view_config(route_name='error', renderer='templates/error.pt') | ||
195 | +def error(request): | ||
196 | + return {'project': 'WSCacicNeo'} | ||
197 | + | ||
194 | @view_config(route_name='configfav', renderer='templates/configfav.pt') | 198 | @view_config(route_name='configfav', renderer='templates/configfav.pt') |
195 | def configfav(request): | 199 | def configfav(request): |
196 | return {'project': 'WSCacicNeo'} | 200 | return {'project': 'WSCacicNeo'} |
@@ -579,6 +583,7 @@ def cadastro_coleta(request): | @@ -579,6 +583,7 @@ def cadastro_coleta(request): | ||
579 | search = orgao_obj.search_list_orgaos() | 583 | search = orgao_obj.search_list_orgaos() |
580 | return {'orgao_doc': search.results} | 584 | return {'orgao_doc': search.results} |
581 | 585 | ||
586 | + | ||
582 | @view_config(route_name='post_coleta_manual') | 587 | @view_config(route_name='post_coleta_manual') |
583 | def post_coleta_manual(request): | 588 | def post_coleta_manual(request): |
584 | """ | 589 | """ |
@@ -615,4 +620,4 @@ def post_coleta_manual(request): | @@ -615,4 +620,4 @@ def post_coleta_manual(request): | ||
615 | }, | 620 | }, |
616 | } | 621 | } |
617 | id_doc = coleta_obj.create_coleta(orgao,coleta_dict) | 622 | id_doc = coleta_obj.create_coleta(orgao,coleta_dict) |
618 | - return Response(str(id_doc)) | ||
619 | \ No newline at end of file | 623 | \ No newline at end of file |
624 | + return Response(str(id_doc)) |