<commit_before># -*- coding: utf-8 -*-

"""
LibreDTE
Copyright (C) SASCO SpA (https://sasco.cl)

Este programa es software libre: usted puede redistribuirlo y/o modificarlo bajo
los términos de la Licencia Pública General Affero de GNU publicada por la
Fundación para el Software Libre, ya sea la versión 3 de la Licencia, o (a su
elección) cualquier versión posterior de la misma.

Este programa se distribuye con la esperanza de que sea útil, pero SIN GARANTÍA
ALGUNA; ni siquiera la garantía implícita MERCANTIL o de APTITUD PARA UN
PROPÓSITO DETERMINADO. Consulte los detalles de la Licencia Pública General
Affero de GNU para obtener una información más detallada.

Debería haber recibido una copia de la Licencia Pública General Affero de GNU
junto a este programa.
En caso contrario, consulte <http://www.gnu.org/licenses/agpl.html>.
"""

"""
Comando para crear un servidor de websockets para procesar solicitudes desde
la aplicación web en el computador local.

Esto permite, por ejemplo, enviar a imprimir desde la aplicación web
directamente a una impresora conectada en la red local o una impresora del
sistema. Para la impresión está soportado el caso de imprimir con ESCPOS o el
PDF del DTE.

@author <NAME>, DeLaF (esteban[at]sasco.cl)
@version 2020-08-23
"""

# módulos usados
import asyncio
import websockets
import functools
import json
import socket
import zipfile
import io
import os, os.path
from datetime import datetime
import subprocess

# opciones en formato largo
long_options = ['printer_type=', 'printer_uri=']

# función principal del comando
def main(Cliente, args, config) :
    printer_type, printer_uri = parseArgs(args)
    log('Iniciando LibreDTE websocketd')
    try :
        server = websockets.serve(
            functools.partial(
                on_message,
                printer_type = printer_type,
                printer_uri = printer_uri,
            ),
            'localhost',
            2186
        )
        asyncio.get_event_loop().run_until_complete(server)
        asyncio.get_event_loop().run_forever()
    except KeyboardInterrupt :
        print()
        return 1
    return 0

# función que procesa los argumentos del comando
def parseArgs(args) :
    printer_type = 'network'
    printer_uri = '127.0.0.1:9100'
    for var, val in args:
        if var == '--printer_type' :
            printer_type = val
        elif var == '--printer_uri' :
            printer_uri = val
    return printer_type, printer_uri


# función que se ejecuta cuando el websocket recibe un mensaje
@asyncio.coroutine
def on_message(websocket, path, printer_type, printer_uri):
    # verificar las partes pasadas al script
    # al menos se debe pasar una acción que es la que se está realizando
    parts = path.split('/')
    if len(parts) < 2 or parts[1] == '':
        yield from websocket.send(json.dumps({
            'status': 1,
            'message': 'Falta indicar la acción que se realizará en el websocket'
        }))
        return 1<commit_msg>Se deja por defecto el websocket configurado con la impresora por defecto que tenga el computador conectada<commit_after># -*- coding: utf-8 -*-

"""
LibreDTE
Copyright (C) SASCO SpA (https://sasco.cl)

Este programa es software libre: usted puede redistribuirlo y/o modificarlo bajo
los términos de la Licencia Pública General Affero de GNU publicada por la
Fundación para el Software Libre, ya sea la versión 3 de la Licencia, o (a su
elección) cualquier versión posterior de la misma.

Este programa se distribuye con la esperanza de que sea útil, pero SIN GARANTÍA
ALGUNA; ni siquiera la garantía implícita MERCANTIL o de APTITUD PARA UN
PROPÓSITO DETERMINADO. Consulte los detalles de la Licencia Pública General
Affero de GNU para obtener una información más detallada.

Debería haber recibido una copia de la Licencia Pública General Affero de GNU
junto a este programa.
En caso contrario, consulte <http://www.gnu.org/licenses/agpl.html>.
"""

"""
Comando para crear un servidor de websockets para procesar solicitudes desde
la aplicación web en el computador local.

Esto permite, por ejemplo, enviar a imprimir desde la aplicación web
directamente a una impresora conectada en la red local o una impresora del
sistema. Para la impresión está soportado el caso de imprimir con ESCPOS o el
PDF del DTE.

@author <NAME>, DeLaF (esteban[at]sasco.cl)
@version 2020-08-23
"""

# módulos usados
import asyncio
import websockets
import functools
import json
import socket
import zipfile
import io
import os, os.path
from datetime import datetime
import subprocess

# opciones en formato largo
long_options = ['printer_type=', 'printer_uri=']

# función principal del comando
def main(Cliente, args, config) :
    printer_type, printer_uri = parseArgs(args)
    log('Iniciando LibreDTE websocketd')
    try :
        server = websockets.serve(
            functools.partial(
                on_message,
                printer_type = printer_type,
                printer_uri = printer_uri,
            ),
            'localhost',
            2186
        )
        asyncio.get_event_loop().run_until_complete(server)
        asyncio.get_event_loop().run_forever()
    except KeyboardInterrupt :
        print()
        return 1
    return 0

# función que procesa los argumentos del comando
def parseArgs(args) :
    printer_type = 'system'
    printer_uri = '127.0.0.1:9100'
    for var, val in args:
        if var == '--printer_type' :
            printer_type = val
        elif var == '--printer_uri' :
            printer_uri = val
    return printer_type, printer_uri


# función que se ejecuta cuando el websocket recibe un mensaje
@asyncio.coroutine
def on_message(websocket, path, printer_type, printer_uri):
    # verificar las partes pasadas al script
    # al menos se debe pasar una acción que es la que se está realizando
    parts = path.split('/')
    if len(parts) < 2 or parts[1] == '':
        yield from websocket.send(json.dumps({
            'status': 1,
            'message': 'Falta indicar la acción que se realizará en el websocket'
        }))
        return 1
{'fraction_non_alphanumeric': 0.06932807622802695, 'fraction_numerical': 0.009857072449482503, 'mean_word_length': 3.1499659168370826, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 7, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 2, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2811713', 'n_tokens_mistral': 1966, 'n_tokens_neox': 1931, 'n_words': 707}