Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.50 KB | None | 0 0
  1. import argparse
  2. import json
  3. import logging
  4. import os
  5. import telegram
  6. from queue import Queue, Empty as EmptyQueue
  7. import sys
  8. import threading
  9. import time
  10. # from urllib.parse import urlparse, urljoin
  11. import exc
  12. if ((3, 0) <= sys.version_info <= (3, 9)):
  13. from urllib.parse import urlparse, urljoin
  14. elif ((2, 0) <= sys.version_info <= (2, 9)):
  15. from urlparse import urlparse, urljoin
  16. from flask import Flask, request, render_template
  17. from flask_cors import CORS
  18. from flask_sse import sse
  19. from redis import StrictRedis
  20. import requests
  21. # from roboloide_modelo import utils
  22. import subprocess
  23.  
  24.  
  25.  
  26. app = Flask(__name__)
  27. CORS(app)
  28.  
  29. app.config["REDIS_URL"] = "redis://localhost:6379"
  30. app.register_blueprint(sse, url_prefix='/notificador-stream')
  31.  
  32. app.config['SECRET_KEY'] = os.urandom(24)
  33. thread = None
  34.  
  35. LOGGER = logging.getLogger('roboloide_notificador')
  36. LOGGER.setLevel(level=logging.DEBUG)
  37. handler = logging.StreamHandler(sys.stdout)
  38. handler.setFormatter(logging.Formatter(
  39. '------ %(levelname)s %(name)s - %(pathname)s::%(lineno)dn'
  40. '%(asctime)s: %(message)s'))
  41. LOGGER.addHandler(handler)
  42.  
  43. # bot = telegram.Bot(token='563825372:AAGhYPGYeci6p2s5SFUtey2XFL2b8gFNfEA')
  44.  
  45.  
  46. def _parse_args(argv, progname=None):
  47. progname = progname or 'roboloide-notificador'
  48. parser = argparse.ArgumentParser(prog=progname,
  49. description='Notificador de eventos')
  50. parser.add_argument('--debug', '-d', action='store_true',
  51. help='Enable debug mode')
  52. parser.add_argument('--port', '-p', default=8000,
  53. help='TCP port')
  54. parser.add_argument('--host', '-h', default='0.0.0.0',
  55. help='Host name')
  56. return parser.parse_args(argv)
  57.  
  58. # def main(argv=None, progname=None):
  59.  
  60. # # def _parse_args(argv, progname=None):
  61. # progname = progname or 'roboloide-modelo'
  62. # argv = argv or sys.argv[1:]
  63.  
  64. # parser = argparse.ArgumentParser(
  65. # prog=progname, description='Modelo de dados do Roboloide')
  66. # parser.add_argument('--hostname', default='0.0.0.0',
  67. # help='Hostname')
  68. # parser.add_argument('--port', default=8000, type=int,
  69. # help='TCP port')
  70. # parser.add_argument('--debug', action='store_true', help='Debug mode')
  71.  
  72. # args = parser.parse_args(argv)
  73.  
  74. # if args.debug:
  75. # utils.redis_cache.invalidar_tudo()
  76. # app.run(
  77. # host=args.hostname,
  78. # port=args.port,
  79. # debug=True
  80. # )
  81. # else:
  82. # new_env = os.environ.copy()
  83. # new_env['PYTHONUNBUFFERED'] = '1'
  84. # subprocess.call(
  85. # ['gunicorn', 'roboloide_modelo.notificador:app', '--reload',
  86. # '--worker-class', 'gevent', '--workers', os.environ.get('6', '9'),
  87. # '--bind', '{args.hostname}:{args.port}'.format(args=args),
  88. # '--config', 'python:gunicorn_conf'],
  89. # stderr=sys.stderr, stdout=sys.stdout, stdin=sys.stdin,
  90. # env=new_env
  91. # )
  92.  
  93.  
  94. def is_safe_url(target):
  95. ref_url = urlparse(request.host_url)
  96. test_url = urlparse(urljoin(request.host_url, target))
  97. return test_url.scheme in ('http', 'https') and ref_url.netloc == test_url.netloc
  98.  
  99.  
  100. def escutar_eventos():
  101. try:
  102. print('ouvindo')
  103. redis = StrictRedis()
  104. channel = redis.pubsub()
  105. canais = [
  106. 'roboloide-captura-eventos',
  107. 'roboloide-captura-captura',
  108. 'roboloide-ajuste-eventos',
  109. 'roboloide-modelo-eventos',
  110. 'roboloide-controlador-eventos',
  111. 'roboloide-notificador-eventos',
  112. 'roboloide-modelo-captura'
  113. ]
  114.  
  115. channel.subscribe(*canais)
  116.  
  117. except exc.RoboNotificadorEncerrou('Robo notificador foi encerrado.'):
  118. msg = 'ERRO!n'
  119. msg += 'Tipo: Módulo caiun'
  120. msg += 'Módulo: Notificadorn'
  121. msg += 'Descrição: Módulo Notificador foi encerrado.n'
  122. # bot.send_message(chat_id='-205358775', text=msg)
  123. raise
  124. print ("saiu")
  125.  
  126. def inicializar_thread():
  127. queue = Queue()
  128.  
  129. thread = threading.Thread(target = escutar_eventos, args=(queue),)
  130. thread.start()
  131. time.sleep(1)
  132.  
  133. @app.route('/notificador/',methods=['GET','POST'])
  134. def test_page():
  135. return render_template('index.html')
  136.  
  137.  
  138. @app.route('/notificador/publicar', methods=['GET','POST'])
  139. def publicar_evento():
  140. # TODO restringir o acesso a este viewpoint para apenas este módulo
  141. print(request.get_json())
  142. data = request.get_json()
  143. sse.publish(data, type='event')
  144. return 'mensagem publicada'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement