Commit 0e90afed8e510313a55bd350bb6d1c44ada648e3

Authored by Macieski
1 parent 9676d27b
Exists in master

notificações

wscacicneo/__init__.py
@@ -11,7 +11,7 @@ from pyramid.config import Configurator @@ -11,7 +11,7 @@ from pyramid.config import Configurator
11 def main(global_config, **settings): 11 def main(global_config, **settings):
12 """ This function returns a Pyramid WSGI application. 12 """ This function returns a Pyramid WSGI application.
13 """ 13 """
14 - 14 +
15 config.setup(settings) 15 config.setup(settings)
16 from wscacicneo.security import groupfinder 16 from wscacicneo.security import groupfinder
17 authn_policy = AuthTktAuthenticationPolicy( 17 authn_policy = AuthTktAuthenticationPolicy(
@@ -20,7 +20,7 @@ def main(global_config, **settings): @@ -20,7 +20,7 @@ def main(global_config, **settings):
20 cfg = Configurator(settings=settings, root_factory='wscacicneo.models.RootFactory') 20 cfg = Configurator(settings=settings, root_factory='wscacicneo.models.RootFactory')
21 cfg.set_authentication_policy(authn_policy) 21 cfg.set_authentication_policy(authn_policy)
22 cfg.set_authorization_policy(authz_policy) 22 cfg.set_authorization_policy(authz_policy)
23 - 23 +
24 cfg.include('pyramid_chameleon') 24 cfg.include('pyramid_chameleon')
25 cfg.add_static_view('static', 'static', cache_max_age=3600) 25 cfg.add_static_view('static', 'static', cache_max_age=3600)
26 cfg.add_route('master', 'master') 26 cfg.add_route('master', 'master')
@@ -42,7 +42,6 @@ def main(global_config, **settings): @@ -42,7 +42,6 @@ def main(global_config, **settings):
42 cfg.add_route('delete_orgao', 'orgao/delete/{sigla}') 42 cfg.add_route('delete_orgao', 'orgao/delete/{sigla}')
43 cfg.add_route('base_de_dados', 'orgao/base/{sigla}') 43 cfg.add_route('base_de_dados', 'orgao/base/{sigla}')
44 # 44 #
45 -  
46 cfg.add_route('user', 'usuario/cadastro') 45 cfg.add_route('user', 'usuario/cadastro')
47 cfg.add_route('post_user', 'post_user') 46 cfg.add_route('post_user', 'post_user')
48 cfg.add_route('put_user', 'put_user') 47 cfg.add_route('put_user', 'put_user')
@@ -51,8 +50,9 @@ def main(global_config, **settings): @@ -51,8 +50,9 @@ def main(global_config, **settings):
51 cfg.add_route('edit_favoritos', 'edit_favoritos') 50 cfg.add_route('edit_favoritos', 'edit_favoritos')
52 cfg.add_route('listuser', 'usuario/lista') 51 cfg.add_route('listuser', 'usuario/lista')
53 cfg.add_route('delete_user', 'usuario/delete/{matricula}') 52 cfg.add_route('delete_user', 'usuario/delete/{matricula}')
  53 + cfg.add_route('notify', 'lista/notificacoes')
  54 + cfg.add_route('post_notify', 'post_notify')
54 # 55 #
55 -  
56 cfg.add_route('list', 'list') 56 cfg.add_route('list', 'list')
57 cfg.add_route('gestao', 'gestao') 57 cfg.add_route('gestao', 'gestao')
58 cfg.add_route('memoria', 'memoria') 58 cfg.add_route('memoria', 'memoria')
@@ -74,7 +74,6 @@ def main(global_config, **settings): @@ -74,7 +74,6 @@ def main(global_config, **settings):
74 cfg.add_route('sobre', 'sobre') 74 cfg.add_route('sobre', 'sobre')
75 cfg.add_route('perfil', 'perfil') 75 cfg.add_route('perfil', 'perfil')
76 cfg.add_route('configapi','configapi') 76 cfg.add_route('configapi','configapi')
77 - cfg.add_route('notify','notify')  
78 cfg.add_route('processador','processador') 77 cfg.add_route('processador','processador')
79 cfg.add_route('configcoleta','configcoleta') 78 cfg.add_route('configcoleta','configcoleta')
80 cfg.add_route('configfav','configfav') 79 cfg.add_route('configfav','configfav')
@@ -83,4 +82,4 @@ def main(global_config, **settings): @@ -83,4 +82,4 @@ def main(global_config, **settings):
83 cfg.add_route('confighome','confighome') 82 cfg.add_route('confighome','confighome')
84 cfg.add_route('db','db') 83 cfg.add_route('db','db')
85 cfg.scan() 84 cfg.scan()
86 - return cfg.make_wsgi_app()  
87 \ No newline at end of file 85 \ No newline at end of file
  86 + return cfg.make_wsgi_app()
wscacicneo/model/notify.py 0 → 100644
@@ -0,0 +1,208 @@ @@ -0,0 +1,208 @@
  1 +#!/usr/env python
  2 +# -*- coding: utf-8 -*-
  3 +__author__ = 'adley'
  4 +
  5 +import logging
  6 +from requests.exceptions import HTTPError
  7 +from wscacicneo import config
  8 +from liblightbase.lbbase.struct import Base, BaseMetadata
  9 +from liblightbase.lbbase.lbstruct.group import *
  10 +from liblightbase.lbbase.lbstruct.field import *
  11 +from liblightbase.lbbase.content import Content
  12 +from liblightbase.lbrest.base import BaseREST
  13 +from liblightbase.lbrest.document import DocumentREST
  14 +from liblightbase.lbutils import conv
  15 +from liblightbase.lbsearch.search import Search, OrderBy
  16 +
  17 +log = logging.getLogger()
  18 +
  19 +class NotifyBase():
  20 + """
  21 + Classe para a base de usuários
  22 + """
  23 + def __init__(self, rest_url=None):
  24 + """
  25 + Método construtor
  26 + """
  27 + if rest_url is None:
  28 + self.rest_url = config.REST_URL
  29 + else:
  30 + self.rest_url = rest_url
  31 + self.baserest = BaseREST(rest_url=self.rest_url, response_object=True)
  32 + self.documentrest = DocumentREST(rest_url=self.rest_url,
  33 + base=self.lbbase, response_object=False)
  34 +
  35 + @property
  36 + def lbbase(self):
  37 + """
  38 + LB Base de Notify
  39 + """
  40 + orgao = Field(**dict(
  41 + name='orgao',
  42 + description='Órgão referente a notrificção',
  43 + alias='orgao',
  44 + datatype='Text',
  45 + indices=['Textual'],
  46 + multivalued=False,
  47 + required=True
  48 + ))
  49 +
  50 + id_coleta = Field(**dict(
  51 + name='id_coleta',
  52 + alias='id_coleta',
  53 + description='id da coleta notificada',
  54 + datatype='Text',
  55 + indices=['Textual'],
  56 + multivalued=False,
  57 + required=True
  58 + ))
  59 +
  60 + notify = Field(**dict(
  61 + name='notify',
  62 + alias='notify',
  63 + description='campo de notificações',
  64 + datatype='Text',
  65 + indices=['Textual'],
  66 + multivalued=False,
  67 + required=True
  68 + ))
  69 +
  70 + status = Field(**dict(
  71 + name='status',
  72 + alias='status',
  73 + description='status da notificação',
  74 + datatype='Text',
  75 + indices=['Textual'],
  76 + multivalued=False,
  77 + required=True
  78 + ))
  79 +
  80 + base_metadata = BaseMetadata(
  81 + name='notify',
  82 + )
  83 +
  84 + content_list = Content()
  85 + content_list.append(orgao)
  86 + content_list.append(id_coleta)
  87 + content_list.append(notify)
  88 + content_list.append(status)
  89 +
  90 + lbbase = Base(
  91 + metadata=base_metadata,
  92 + content=content_list
  93 + )
  94 +
  95 + return lbbase
  96 +
  97 + @property
  98 + def metaclass(self):
  99 + """
  100 + Retorna metaclass para essa base
  101 + """
  102 + return self.lbbase.metaclass()
  103 +
  104 + def create_base(self):
  105 + """
  106 + Cria base no LB
  107 + """
  108 + response = self.baserest.create(self.lbbase)
  109 + if response.status_code == 200:
  110 + return self.lbbase
  111 + else:
  112 + return None
  113 +
  114 + def remove_base(self):
  115 + """
  116 + Remove base from Lightbase
  117 + :param lbbase: LBBase object instance
  118 + :return: True or Error if base was not excluded
  119 + """
  120 + response = self.baserest.delete(self.lbbase)
  121 + if response.status_code == 200:
  122 + return True
  123 + else:
  124 + raise IOError('Error excluding base from LB')
  125 +
  126 +
  127 +
  128 +notify_base = NotifyBase()
  129 +
  130 +
  131 +class Notify(notify_base.metaclass):
  132 + """
  133 + Classe genérica de órgãos
  134 + """
  135 + def __init__(self, **args):
  136 + super(Orgao, self).__init__(**args)
  137 + self.documentrest = notify_base.documentrest
  138 +
  139 + def notify_to_dict(self):
  140 + """
  141 + Convert status object to Python dict
  142 + :return:
  143 + """
  144 +
  145 + return conv.document2dict(notify_base.lbbase, self)
  146 +
  147 + def notify_to_json(self):
  148 + """
  149 + Convert object to json
  150 + :return:
  151 + """
  152 +
  153 + return conv.document2json(notify_base.lbbase, self)
  154 +
  155 + def create_notify(self):
  156 + """
  157 + Insert document on base
  158 +
  159 + :return: Document creation ID
  160 + """
  161 +
  162 + document = self.notify_to_json()
  163 + try:
  164 + result = notify_base.documentrest.create(document)
  165 + except HTTPError as err:
  166 + log.error(err.strerror)
  167 + return None
  168 +
  169 + return result
  170 +
  171 + def search_notify(self, sigla):
  172 + """
  173 + Busca registro completo do notify pelo id
  174 + :return: obj collection com os dados da base
  175 + """
  176 + search = Search(
  177 + literal="document->>'sigla' = '"+orgao+"'"
  178 + )
  179 + results = self.documentrest.get_collection(search_obj=search)
  180 +
  181 + return results
  182 +
  183 + def search_list_notify(self):
  184 + """
  185 + Retorna todos os docs da base
  186 + """
  187 + search = Search(
  188 + limit=None
  189 + )
  190 + results = self.documentrest.get_collection(search)
  191 +
  192 + return results
  193 +
  194 + def edit_notify(self, id, doc):
  195 + """
  196 + altera um doc ou path do doc
  197 + """
  198 + results = self.documentrest.update(id, doc)
  199 +
  200 + return results
  201 +
  202 + def delete_notify(self, id):
  203 + """
  204 + Deleta o Órgao apartir do ID
  205 + """
  206 + results = orgao_base.documentrest.delete(id)
  207 +
  208 + return results
wscacicneo/templates/notify_coleta.pt
1 <metal:main use-macro="load: master.pt"> 1 <metal:main use-macro="load: master.pt">
2 <metal:content fill-slot="conteudo"> 2 <metal:content fill-slot="conteudo">
3 - <div class="widget wgreen">  
4 - <div class="widget-content">  
5 - <div class="padd">  
6 - <form class="form-horizontal" role="form">  
7 - <div class="form-group">  
8 - <label class="col-lg-2 control-label">Ministério</label>  
9 - <div class="col-lg-5">  
10 - <input type="text" id="ministerio" class="form-control" placeholder="Ministério">  
11 - </div>  
12 - </div>  
13 - <div class="form-group">  
14 - <label class="col-lg-2 control-label">ID da Coleta</label> 3 + <div class="widget-content">
  4 + <div class="padd">
  5 + <form class="form-horizontal" style="margin-top: 20px;" role="form">
  6 + <div class="form-group">
  7 + <label class="col-lg-2 control-label">Ministério</label>
15 <div class="col-lg-5"> 8 <div class="col-lg-5">
16 - <input type="password" id="id_coleta" class="form-control" placeholder="ID">  
17 - </div> 9 + <input type="text" id="orgao" class="form-control" placeholder="Ministério">
18 </div> 10 </div>
19 - <div class="form-group">  
20 - <label class="col-lg-2 control-label">Notificação</label>  
21 - <div class="col-lg-5">  
22 - <textarea class="form-control" id="notify" rows="5" placeholder="Conteudo" style="margin: 0px -57.671875px 0px 0px; width: 423px; height: 104px;"></textarea>  
23 - </div> 11 + </div>
  12 + <div class="form-group">
  13 + <label class="col-lg-2 control-label">ID da Coleta</label>
  14 + <div class="col-lg-5">
  15 + <input type="password" id="id_coleta" class="form-control" placeholder="ID">
  16 + </div>
  17 + </div>
  18 + <div class="form-group">
  19 + <label class="col-lg-2 control-label">Notificação</label>
  20 + <div class="col-lg-5">
  21 + <textarea class="form-control" id="notify" rows="5" placeholder="Conteudo" style="margin: 0px -57.671875px 0px 0px; width: 423px; height: 104px;"></textarea>
24 </div> 22 </div>
25 - <div class="form-group">  
26 - <div class="col-lg-offset-2 col-lg-6">  
27 - <button type="button" id="enviar" class="btn btn-sm btn-default">Enviar</button>  
28 - <button type="button" class="btn btn-sm btn-default">Cancelar</button>  
29 - </div> 23 + </div>
  24 + <div class="form-group">
  25 + <div class="col-lg-offset-2 col-lg-6">
  26 + <button type="button" id="enviar" class="btn btn-sm btn-default">Enviar</button>
  27 + <button type="button" class="btn btn-sm btn-default">Cancelar</button>
30 </div> 28 </div>
31 - </form>  
32 - </div> 29 + </div>
  30 + </form>
33 </div> 31 </div>
34 </div> 32 </div>
35 </metal:content> 33 </metal:content>
36 <metal:content fill-slot="javascript"> 34 <metal:content fill-slot="javascript">
37 <script type="text/javascript"> 35 <script type="text/javascript">
38 $('#enviar').click(function(){ 36 $('#enviar').click(function(){
  37 + alert('asdasdasd')
  38 + var data = {
  39 + 'orgao' : $('#orgao').val(),
  40 + 'id_coleta' : $('#id_coleta').val(),
  41 + 'notify' : $('#notify').val(),
  42 + 'status' : True
  43 + }
  44 + $.ajax({
  45 + type: "POST",
  46 + url: "${request.route_url('root')}post_notify",
  47 + data: data,
  48 + success: function(){ alert('asdasdasd') },
  49 + error: function(){ alert('Não foi desta vez Tente novamente mais tarde') },
  50 + });
39 }); 51 });
40 </script> 52 </script>
41 </metal:content> 53 </metal:content>
wscacicneo/test/test_notify_base.py 0 → 100644
@@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
  1 +#!/usr/env python
  2 +# -*- coding: utf-8 -*-
  3 +__author__ = 'macieski'
  4 +
  5 +import unittest
  6 +import configparser
  7 +import os
  8 +from wscacicneo.model import notify
  9 +from liblightbase.lbbase.struct import Base
  10 +from liblightbase.lbutils import conv
  11 +from pyramid import testing
  12 +
  13 +class NotifyBase(unittest.TestCase):
  14 +
  15 +
  16 + def setUp(self):
  17 + self.rest_url = 'http://api.brlight.net/api'
  18 +
  19 + def test_create_base(self):
  20 + """
  21 + Testa criação da base no LB
  22 + """
  23 + notify_base = notify.NotifyBase(self.rest_url)
  24 + lbbase = notify_base.lbbase
  25 + self.assertIsInstance(lbbase, Base)
  26 +
  27 + retorno = notify_base.create_base()
  28 + self.assertIsInstance(retorno, Base)
  29 +
  30 + def tearDown(self):
  31 + pass
wscacicneo/views.py
@@ -66,8 +66,8 @@ def graficop(request): @@ -66,8 +66,8 @@ def graficop(request):
66 def gestor(request): 66 def gestor(request):
67 return {'project': 'WSCacicNeo'} 67 return {'project': 'WSCacicNeo'}
68 68
69 -@view_config(route_name='notifications', renderer='templates/dashboard.pt')  
70 -def notifications(request): 69 +@view_config(route_name='notify', renderer='templates/notify_coleta.pt')
  70 +def notify(request):
71 return {'project': 'WSCacicNeo'} 71 return {'project': 'WSCacicNeo'}
72 72
73 @view_config(route_name='admin', renderer='templates/admin.pt') 73 @view_config(route_name='admin', renderer='templates/admin.pt')
@@ -86,10 +86,6 @@ def cadastro(request): @@ -86,10 +86,6 @@ def cadastro(request):
86 def orgao(request): 86 def orgao(request):
87 return {'project': 'WSCacicNeo'} 87 return {'project': 'WSCacicNeo'}
88 88
89 -@view_config(route_name='notify_coleta', renderer='templates/notify_coleta.pt')  
90 -def notify_coleta(request):  
91 - return {'project': 'WSCacicNeo'}  
92 -  
93 @view_config(route_name='listorgao', renderer='templates/list_orgao.pt') 89 @view_config(route_name='listorgao', renderer='templates/list_orgao.pt')
94 def listorgao(request): 90 def listorgao(request):
95 orgao_obj = Orgao( 91 orgao_obj = Orgao(
@@ -177,10 +173,6 @@ def editorgao(request): @@ -177,10 +173,6 @@ def editorgao(request):
177 'url' : search.results[0].url 173 'url' : search.results[0].url
178 } 174 }
179 175
180 -@view_config(route_name='notify', renderer='templates/notify.pt')  
181 -def notify(request):  
182 - return {'project': 'WSCacicNeo'}  
183 -  
184 @view_config(route_name='configcoleta', renderer='templates/configcoleta.pt') 176 @view_config(route_name='configcoleta', renderer='templates/configcoleta.pt')
185 def configcoleta(request): 177 def configcoleta(request):
186 return {'project': 'WSCacicNeo'} 178 return {'project': 'WSCacicNeo'}
@@ -353,6 +345,11 @@ def edituser(request): @@ -353,6 +345,11 @@ def edituser(request):
353 'senha' : search.results[0].senha 345 'senha' : search.results[0].senha
354 } 346 }
355 347
  348 +@view_config(route_name='post_notify')
  349 +def post_notify(request):
  350 + print('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
  351 + return { }
  352 +
356 @view_config(route_name='put_user') 353 @view_config(route_name='put_user')
357 def put_user(request): 354 def put_user(request):
358 """ 355 """
@@ -514,3 +511,5 @@ def logout(request): @@ -514,3 +511,5 @@ def logout(request):
514 headers = forget(request) 511 headers = forget(request)
515 return HTTPFound(location = request.route_url('login'), 512 return HTTPFound(location = request.route_url('login'),
516 headers = headers) 513 headers = headers)
  514 +
  515 +