def main():
    '''
    Instancia y ejecuta todos los threads del programa
    '''
    API = WebApi()
    #API = WebApi(url = 'http://generador/generador/api/v1')
    config = API.get_config(1)
    logging.debug(config)

    DEPRECIACION = config['porcentaje_devaluacion']
    CAPITAL_INICIAL = config['valor_proyecto']
    VALOR_SIMBOLICO = config['valor_simbolico']
    VALOR_MINUTO_TRABAJO = config['valor_hora_trabajo']
    #minutos
    TIEMPO_REALIZACION_TITULO = 5

    try:
        #inicializa los threads
        watcher = WatchAndPost(DEPRECIACION)
        watcher.start()
        ca = CreateCert(watcher,
                VALOR_SIMBOLICO,
                VALOR_MINUTO_TRABAJO,
                TIEMPO_REALIZACION_TITULO)
        ca.start()
        ser = SerialCom(ca, watcher)
        ser.start()
        while True:
            #simplemente mantiene vivo el MainThread para poder terminar el
            #proceso con cntr+c
            time.sleep(0.01)

    except KeyboardInterrupt:
        '''
        cntrl + c: termina los hilos y apaga el programa
        '''
        watcher.quit()
        watcher.join()
        ca.quit()
        ca.join()
        ser.quit()
        ser.join()

        sys.exit("closing by CRTL+C")

    except Exception, err:
        print err
 def __init__(self, w, simbolico, minuto, tiempo):
     Thread.__init__(self)
     self.name = 'CreateCert'
     self.loop = Event()
     #evento para crear el titulo
     self.doit = Event()
     #inicializa en set el evento
     self.doit.set()
     #instancia de WatchAndPost
     self.watcher = w
     self.api = WebApi()
     self.tw = TemplateWriter(template='base65.jinja')
     self.ca = Certificate_generator('keys/generador.key',
                                     'keys/generador.crt')
     self.valor_simbolico = simbolico
     self.valor_minuto = minuto
     self.tiempo_trabajo = tiempo
Example #3
0
    def __init__(self):

        client_id = config['authentication']['client_id']

        redirect_uri = 'https://platelminto.eu.pythonanywhere.com/users/registering'

        scope_list = [
            'user-library-read', 'user-library-modify',
            'playlist-modify-public', 'user-modify-playback-state',
            'user-read-playback-state', 'playlist-modify-private'
        ]

        self.web_api = WebApi(scope_list=scope_list,
                              client_id=client_id,
                              redirect_uri=redirect_uri)
        if current_os == 'Darwin':
            self.local_api = AppleScriptApi()

        elif current_os == 'Windows':
            self.local_api = MediaKeysApi()

        self.repeat_states = ['track', 'context', 'off']
class CreateCert(Thread):
    '''
    Clase que crea y firma los certificados criptograficos de cada titulo
    valor. Recibe en los parametros de inicializacion una instancia de la clase
    ``WatchAndPost`` para poder actualizar tanto el capital como el numero de
    titulos emitidos.

    :param w: Instancia de la clase ``WatchAndPost``
    :param simbolico: porcentaje del valor simbolico
    :param minuto: valor del minuto de trabajo
    :param tiempo: tiempo de trabajo de realizacion de cada bono

    '''
    def __init__(self, w, simbolico, minuto, tiempo):
        Thread.__init__(self)
        self.name = 'CreateCert'
        self.loop = Event()
        #evento para crear el titulo
        self.doit = Event()
        #inicializa en set el evento
        self.doit.set()
        #instancia de WatchAndPost
        self.watcher = w
        self.api = WebApi()
        self.tw = TemplateWriter(template='base65.jinja')
        self.ca = Certificate_generator('keys/generador.key',
                                        'keys/generador.crt')
        self.valor_simbolico = simbolico
        self.valor_minuto = minuto
        self.tiempo_trabajo = tiempo

    def run(self):
        '''
        Esta funcion corre en el fondo hasta ser llamada para crear el
        certificado -cuando llega un dato del puerto serial-. Internamente
        realiza los calculos del porcentaje a agregar al capital y actualiza
        los valores en el estado global del sistema.

        '''
        while not self.loop.is_set():
            #mantiene vivo el thread
            self.loop.wait(0.01)

    def quit(self):
        '''
        Cambia el flag interno para terminar la funcion ``self.run()`` y
        terminar el Thread
        '''
        self.loop.set()

    def create(self):
        logging.debug('generando certificado')
        logging.debug('numero de titulos %s', self.watcher.num_titulos_emitidos)

        #toma el tiempo y suma uno a los titulos
        now = datetime.datetime.now()
        self.watcher.setNumTitulosPlus()
        new_num = self.watcher.num_titulos_emitidos

        #actualiza el valor del capital
        percentage = (self.valor_minuto * self.valor_simbolico) / 100
        addToCapital = percentage * self.tiempo_trabajo
        self.watcher.setCapital(addToCapital)

        logging.debug('>>> valuacion: %s', addToCapital)
        logging.debug('nuevo numero de titulos %s', new_num)

        CA_response = self.ca.generate_and_sign('CO', 'Bogota', 'Bogota',
                        'generador de valores', 'generador de certificados',
                        str(new_num).zfill(9), new_num)

        logging.debug('certificado: %s', CA_response)

        source = self.tw.createSource(CA_response['certificate'], CA_response['digest'],
                        str(new_num).zfill(9), now)

        new_post = self.api.post_valor(new_num, now,
                        CA_response['certificate'],
                        CA_response['key'],
                        source)
        logging.debug('nuevo cert', new_post)
        #al finalizar vuelve a poner el set en el evento
        #self.doit.set()

        return source
Example #5
0
def home():
    utterance = request.args.get('utterance')
    user_session_id = request.args.get('user_session_id')
    key_session_id = "session_id"
    web_api = WebApi(utterance, new_session)
    active_module_node = dict()
    last_active_node = None
    # check for last active state for a user
    active_state_nodes, active_bot, active_module_id = web_api.get_user_active_state(
        key_session_id, user_session_id)
    if active_state_nodes:
        if active_module_id in active_state_nodes:
            last_active_node = active_state_nodes[active_module_id]

    if not active_bot:
        bot = initialize_bot()
    else:
        bot = active_bot

    chat = ConsoleChatInterface(bot)

    if not utterance or user_session_id == "null":
        if user_session_id == "null":  # for new user coming first time
            session_id = str(uuid.uuid4())
            final_api_output = add_user_and_start_chat(
                web_api, chat, active_state_nodes, key_session_id, session_id,
                last_active_node, bot, active_module_id, '')
            logger.info(json.dumps(final_api_output))
        else:  # if user open new tab while old tab is also open i.e. session exist
            session_id = user_session_id
            if not web_api.user_session_exist(key_session_id, session_id):
                final_api_output = add_user_and_start_chat(
                    web_api, chat, active_state_nodes, key_session_id,
                    session_id, last_active_node, bot, active_module_id, '')
                logger.info(json.dumps(final_api_output))

            else:  # for last user utterance as first bot message
                last_user_utterance = web_api.get_last_user_utterance(
                    key_session_id, user_session_id)
                if not last_user_utterance:  # if user open new tab without any chat in old tab
                    final_api_output = chat.start_chat('', active_state_nodes,
                                                       last_active_node,
                                                       active_module_id,
                                                       new_session, session_id)
                    logger.info(json.dumps(final_api_output))
                else:
                    active_node, module_id, final_api_output = chat.start_chat(
                        last_user_utterance, active_state_nodes,
                        last_active_node, active_module_id, new_session,
                        session_id)
                    logger.info(json.dumps(final_api_output))
    else:

        session_id = user_session_id
        active_node, module_id, final_api_output = chat.start_chat(
            utterance, active_state_nodes, last_active_node, active_module_id,
            new_session, session_id)

        if active_node and module_id and active_bot:
            last_active_node = active_node
            active_module_id = module_id
            active_user_bot = active_bot

        if web_api.user_session_exist(key_session_id, session_id):
            web_api.update_last_user_utterance(key_session_id, user_session_id)
            if active_node and module_id and active_bot:
                web_api.update_user_active_state(key_session_id,
                                                 user_session_id, active_node,
                                                 active_bot, module_id)

        logger.info(json.dumps(final_api_output))

    # if last_active_node:
    #     web_api.print_active_tree(last_active_node)

    chatbot_output = {"chatbot_output": final_api_output}
    user_session_id = {str(key_session_id): session_id}
    final_api_output = web_api.finalize_api_output(chatbot_output,
                                                   user_session_id)

    return jsonify(final_api_output)