Exemplo n.º 1
0
    def __init__(self, iniciar_hw=True):
        self._mesa = None
        self.apertura = None
        self._tmp_apertura = None
        self.recuento = None
        self.interna = None
        self.impresora = None
        self.lector = None
        # para poder iluminar de rojo en el recuento
        self.logger = get_logger(MODULO_SUFRAGIO)
        self.salt = ""

        if iniciar_hw:
            from dbus.exceptions import DBusException
            from dbus.mainloop.glib import DBusGMainLoop
            DBusGMainLoop(set_as_default=True)
            retries = 3
            while retries:
                try:
                    self.impresora = DbusPrintController()
                    retries = 0
                except DBusException as error:
                    msg = "Hubo un problema para inicializar la impresora"
                    self.logger.error(msg)
                    self.logger.error(error)
                    retries -= 1
                    sleep(5)

            self.lector = DbusLectorController()
            self.powermanager = DbusPowerManagerController()
            self.backlight = DbusBacklightController()
            self.agent = DbusAgentController()
            self.fancoolers = DbusFanCoolersController()
            self.pir = DbusPIRController()

        self.locutor = None
Exemplo n.º 2
0
    def __init__(self, iniciar_hw=True):
        self._mesa = None
        self.apertura = None
        self._tmp_apertura = None
        self.recuento = None
        self.interna = None
        self.impresora = None
        self.lector = None
        # para poder iluminar de rojo en el recuento
        self.logger = get_logger(MODULO_SUFRAGIO)
        self.salt = ""

        if iniciar_hw:
            from dbus.exceptions import DBusException
            from dbus.mainloop.glib import DBusGMainLoop
            DBusGMainLoop(set_as_default=True)
            retries = 3
            while retries:
                try:
                    self.impresora = DbusPrintController()
                    retries = 0
                except DBusException as error:
                    msg = "Hubo un problema para inicializar la impresora"
                    self.logger.error(msg)
                    self.logger.error(error)
                    retries -= 1
                    sleep(5)

            self.lector = DbusLectorController()
            self.powermanager = DbusPowerManagerController()
            self.backlight = DbusBacklightController()
            self.agent = DbusAgentController()
            self.fancoolers = DbusFanCoolersController()
            self.pir = DbusPIRController()

        self.locutor = None
Exemplo n.º 3
0
# coding: utf-8
from __future__ import absolute_import
import dbus
from json import loads

from base64 import b64encode, b64decode
from gi.repository.GObject import timeout_add

from msa.core.ipc.settings import DBUS_BUSNAME_RFID, DBUS_LECTOR_PATH
from msa.core.logging import get_logger
from msa.core.rfid.constants import CLASE_ICODE, CLASE_ICODE2, CLASE_MIFARE


logger = get_logger("lector_client")


class DbusLectorController():
    def __init__(self, loop=None):
        self.bus = dbus.SessionBus(mainloop=loop)
        self._signal_tag = None

    def _get_lector(self, loop=None):
        try:
            lector = self.bus.get_object(DBUS_BUSNAME_RFID,
                                         DBUS_LECTOR_PATH)
        except dbus.exceptions.DBusException:
            lector = None
        return lector

    def enable_events(self):
        """ Habilita la notificación de eventos para uso automático,
Exemplo n.º 4
0
"""
Clases bases para el manejo del sistema de plugins de la aplicacion.
"""
from importlib import import_module
from inspect import getmembers

from msa.modulos.constants import PATH_MODULOS, MODULOS_PLUGINS
from msa.core.logging import get_logger


logger = get_logger("plugin_manager")
# variable de modulo que contiene los plugins habilitados
_enabled_plugins = {}


class PluginManager():
    """Maneja los plugins de la aplicacion."""
    @classmethod
    def enabled(cls, nombre):
        """Nos dice si un plugin esta habilitado o no.

        Argumentos:
            nombre -- nombre del plugin.
        """
        return nombre in _enabled_plugins

    @classmethod
    def get_plugin(self, nombre):
        """Devuelve la instancia del plugin registrado.

        Argumentos:
Exemplo n.º 5
0
"""
Clases bases para el manejo del sistema de plugins de la aplicacion.
"""
from importlib import import_module
from inspect import getmembers

from msa.modulos.constants import PATH_MODULOS, MODULOS_PLUGINS
from msa.core.logging import get_logger

logger = get_logger("plugin_manager")
# variable de modulo que contiene los plugins habilitados
_enabled_plugins = {}


class PluginManager():
    """Maneja los plugins de la aplicacion."""
    @classmethod
    def enabled(cls, nombre):
        """Nos dice si un plugin esta habilitado o no.

        Argumentos:
            nombre -- nombre del plugin.
        """
        return nombre in _enabled_plugins

    @classmethod
    def get_plugin(self, nombre):
        """Devuelve la instancia del plugin registrado.

        Argumentos:
            nombre -- nombre del plugin.
Exemplo n.º 6
0
# coding: utf-8
from __future__ import absolute_import
import dbus

from base64 import b64encode
from json import loads
from tempfile import NamedTemporaryFile

from msa.core.imaging.helpers import get_dpi_boletas
from msa.core.ipc.settings import DBUS_BUSNAME_PRINTER, DBUS_IMPRESORA_PATH
from msa.core.logging import get_logger
from msa.core.settings import COMPRESION_IMPRESION


logger = get_logger("dbus_client")


class DbusPrintController():
    def __init__(self):
        self.bus = dbus.SessionBus()
        self.printer = self._get_printer()
        self.tiene_papel = self._estado_inicial_tarjeta()
        self._callback_tarjeta = None
        self._signal_paper = self.registrar_estado_papel()
        self._signal_insertando = None
        self._signal_autofeed = None
        self._callback_expulsada = None

        self.printer.connect_to_signal("boleta_expulsada",
                                       self.boleta_expulsada)
Exemplo n.º 7
0
""" audioplayer.py
    Módulo para reproducción de archivos de sonido vía ALSA
"""
# Importante para el cálculo del sleep en run()
import time

from alsaaudio import PCM, Mixer, ALSAAudioError, MIXER_CHANNEL_ALL
from datetime import datetime
from threading import Thread
from wave import open as waveOpen

from msa.core.logging import get_logger
from msa.core.audio.settings import SPEECH_PAUSE
from msa.core.audio.constants import VALORES_VOLUMEN, MIXER_PRIO

logger = get_logger("core")


class WavData:

    def __init__(self, nchannels, frate, nframes, data):
        self.nchannels = nchannels
        self.frate = frate
        self.data = data
        self.nframes = nframes


class WavPlayer(Thread):

    """ Un thread que ejecuta archivos de sonido.
Exemplo n.º 8
0
import sensors

from msa.core.hardware.constants import (FAN_THRESHOLD_HIGH, FAN_THRESHOLD_LOW,
                                         MAX_FAN_SPEED, MIN_FAN_SPEED)
from msa.core.logging import get_logger

logger = get_logger("temperature")


def get_fan_speed(temp):
    if temp > FAN_THRESHOLD_HIGH:
        new_speed = MAX_FAN_SPEED
    elif temp < FAN_THRESHOLD_LOW:
        new_speed = 0
    else:
        new_speed = (((temp - FAN_THRESHOLD_LOW) /
                      (FAN_THRESHOLD_HIGH - FAN_THRESHOLD_LOW)) *
                     (MAX_FAN_SPEED - MIN_FAN_SPEED)) + MIN_FAN_SPEED

    return int(new_speed)


def get_temp():
    sensors.init()
    temp = 0
    try:
        for chip in sensors.ChipIterator():
            for feature in sensors.FeatureIterator(chip):
                subs = list(sensors.SubFeatureIterator(chip, feature))
                try:
                    sensor_temp = sensors.get_value(chip, subs[0].number)
Exemplo n.º 9
0
# coding: utf-8
from __future__ import absolute_import
import dbus

from base64 import b64encode
from json import loads
from tempfile import NamedTemporaryFile

from msa.core.imaging.helpers import get_dpi_boletas
from msa.core.ipc.settings import DBUS_BUSNAME_PRINTER, DBUS_IMPRESORA_PATH
from msa.core.logging import get_logger
from msa.core.settings import COMPRESION_IMPRESION

logger = get_logger("dbus_client")


class DbusPrintController():
    def __init__(self):
        self.bus = dbus.SessionBus()
        self.printer = self._get_printer()
        self.tiene_papel = self._estado_inicial_tarjeta()
        self._callback_tarjeta = None
        self._signal_paper = self.registrar_estado_papel()
        self._signal_insertando = None
        self._signal_autofeed = None
        self._callback_expulsada = None

        self.printer.connect_to_signal("boleta_expulsada",
                                       self.boleta_expulsada)

    def _get_printer(self):
Exemplo n.º 10
0
from msa.core.data.candidaturas import Candidatura, Categoria, Lista, Partido
from msa.core.hardware.constants import FAN_THRESHOLD_OFF
from msa.core.hardware.settings import (DEFAULT_BRIGHTNESS,
                                        ITERACIONES_APAGADO, RFID_POWER,
                                        USAR_FAN, USAR_PIR)
from msa.core.hardware.temperature import get_fan_speed, get_temp
from msa.core.i18n import levantar_locales
from msa.core.ipc.server.armve_controller import ARMVEController
from msa.core.ipc.server.dbus_service import MSADbusService
from msa.core.ipc.settings import DBUS_ARMVE_PATH, DBUS_BUSNAME_ARMVE
from msa.core.logging import get_logger, StreamToLogger
from msa.core.logging.settings import LOG_CAPTURE_STDOUT


levantar_locales()
logger = get_logger("armve_service")

if LOG_CAPTURE_STDOUT:
    sys.stdout = StreamToLogger(logger, INFO)
    sys.stderr = StreamToLogger(logger, ERROR)


class ARMVEDBus(MSADbusService):

    """Server de DBus para ARMVE."""

    def __init__(self):
        """Constructor"""
        self.object_path = DBUS_ARMVE_PATH
        self.bus_name = DBUS_BUSNAME_ARMVE
        self._conn = False
Exemplo n.º 11
0
from msa.core.documentos.actas import Apertura, Autoridad, Recuento
from msa.core.documentos.boletas import Seleccion
from msa.core.imaging.imagen_prueba import ImagenPrueba
from msa.core.logging import get_logger
from msa.core.rfid.constants import (NO_TAG, TAGS_ADMIN, TAG_ADMIN, TAG_DATOS,
                                     TAG_COLISION, TAG_VACIO, CLASE_ICODE2,
                                     TIPOS_TAGS, TIPOS_TAGS_REV,
                                     COD_TAG_DESCONOCIDO, TAG_VOTO,
                                     TAG_RECUENTO, COD_TAG_RECUENTO,
                                     COD_TAG_INICIO, COD_TAG_ADDENDUM)
from msa.core.settings import TOKEN, COMPROBAR_TOKEN
from msa.settings import QUEMA
from six.moves import range


logger = get_logger("armve_controller")


class ARMVEController(object):

    """Controlador para el ARMVEService."""

    def __init__(self, parent):
        """Constructor para el Controlador.

        Argumentos:
            parent -- el servicio.
        """
        self.parent = parent
        self._getting_tag_data = False
        self._buffering = False
Exemplo n.º 12
0
from base64 import encodestring

from msa.core.config_manager import Config
from msa.core.imaging.helpers import init_jinja, xml2pil
from msa.core.logging import get_logger

logger = get_logger("imaging")
jinja_env = init_jinja()


class Imagen(object):
    """Clase base para las imagenes del modulo."""
    def generate_data(self):
        """Genera la data para enviar al template."""
        raise NotImplementedError("You must implement on subclass")

    def render_template(self):
        self.rendered_template = jinja_env.get_template(self.template)

    def render_svg(self):
        """Renderiza el SVG."""
        data = self.generate_data()
        xml = self.rendered_template.render(**data)
        return xml

    def render_image(self):
        """Renderiza la imagen."""
        xml = self.render_svg()
        return xml2pil(xml, self.data['width'], self.data['height'])

    def _get_img_b64(self, img_path):
Exemplo n.º 13
0
import sensors

from msa.core.hardware.constants import (FAN_THRESHOLD_HIGH, FAN_THRESHOLD_LOW,
                                         MAX_FAN_SPEED, MIN_FAN_SPEED)
from msa.core.logging import get_logger


logger = get_logger("temperature")


def get_fan_speed(temp):
    if temp > FAN_THRESHOLD_HIGH:
        new_speed = MAX_FAN_SPEED
    elif temp < FAN_THRESHOLD_LOW:
        new_speed = 0
    else:
        new_speed = (((temp - FAN_THRESHOLD_LOW) /
                      (FAN_THRESHOLD_HIGH - FAN_THRESHOLD_LOW)) *
                     (MAX_FAN_SPEED - MIN_FAN_SPEED)) + MIN_FAN_SPEED

    return int(new_speed)


def get_temp():
    sensors.init()
    temp = 0
    try:
        for chip in sensors.ChipIterator():
            for feature in sensors.FeatureIterator(chip):
                subs = list(sensors.SubFeatureIterator(chip, feature))
                try:
Exemplo n.º 14
0
# -*- coding: utf-8 -*-
import os
import time
from hashlib import sha1
from threading import Thread

from msa.constants import PATH_TTS
from msa.core.audio.player import WavPlayer
from msa.core.audio.settings import VOLUMEN_GENERAL
from msa.core.data.settings import JUEGO_DE_DATOS
from msa.core.logging import get_logger


logger = get_logger("speech")
_audio_player = None


class Locutor(Thread):

    def __init__(self):
        Thread.__init__(self)
        global _audio_player
        if _audio_player is None or not _audio_player.is_alive():
            _audio_player = WavPlayer()
            _audio_player.start()
            _audio_player.set_volume(VOLUMEN_GENERAL)
        self.reset()
        self.setDaemon(True)

    def run(self):
        while True:
Exemplo n.º 15
0
                                         encodear_string_apertura)
from msa.core.documentos.structs import (struct_apertura, struct_recuento,
                                         struct_recuento_dni)
from msa.core.documentos.tabulacion import Pizarra
from msa.core.exceptions import (MesaNoEncontrada, QRMalformado,
                                 SerialRepetido, TagMalformado, TipoQrErroneo)
from msa.core.i18n.decorators import forzar_idioma
from msa.core.i18n.settings import DEFAULT_LOCALE
from msa.core.imaging.acta import ImagenActa
from msa.core.imaging.qr import crear_qr
from msa.core.logging import get_logger
from msa.core.packing.settings import SMART_PACKING
from msa.core.settings import TOKEN
from six.moves import range, zip

logger = get_logger("core_documentos_actas")

if SMART_PACKING:
    from msa.core.packing.smart_numpacker import pack, unpack, MAXBITS
else:
    from msa.core.packing.numpacker import pack, unpack

from msa.core.packing.numpacker import pack_slow, unpack_slow


class Acta():
    def _encode_qr(self, qr):
        output = BytesIO()
        qr.save(output, format='PNG')
        qr_img_data = output.getvalue()
        output.close()
Exemplo n.º 16
0
from msa.core.armve.helpers import array_to_printable_string
from msa.core.documentos.actas import Apertura, Autoridad, Recuento
from msa.core.documentos.boletas import Seleccion
from msa.core.imaging.imagen_prueba import ImagenPrueba
from msa.core.logging import get_logger
from msa.core.rfid.constants import (NO_TAG, TAGS_ADMIN, TAG_ADMIN, TAG_DATOS,
                                     TAG_COLISION, TAG_VACIO, CLASE_ICODE2,
                                     TIPOS_TAGS, TIPOS_TAGS_REV,
                                     COD_TAG_DESCONOCIDO, TAG_VOTO,
                                     TAG_RECUENTO, COD_TAG_RECUENTO,
                                     COD_TAG_INICIO, COD_TAG_ADDENDUM)
from msa.core.settings import TOKEN, COMPROBAR_TOKEN
from msa.settings import QUEMA
from six.moves import range

logger = get_logger("armve_controller")


class ARMVEController(object):
    """Controlador para el ARMVEService."""
    def __init__(self, parent):
        """Constructor para el Controlador.

        Argumentos:
            parent -- el servicio.
        """
        self.parent = parent
        self._getting_tag_data = False
        self._buffering = False
        self._print_on_finish = False
Exemplo n.º 17
0
from msa.core.data import TemplateImpresion, TemplateMap, Ubicacion
from msa.core.data.candidaturas import Candidatura, Categoria, Lista, Partido
from msa.core.hardware.constants import FAN_THRESHOLD_OFF
from msa.core.hardware.settings import (DEFAULT_BRIGHTNESS,
                                        ITERACIONES_APAGADO, RFID_POWER,
                                        USAR_FAN, USAR_PIR)
from msa.core.hardware.temperature import get_fan_speed, get_temp
from msa.core.i18n import levantar_locales
from msa.core.ipc.server.armve_controller import ARMVEController
from msa.core.ipc.server.dbus_service import MSADbusService
from msa.core.ipc.settings import DBUS_ARMVE_PATH, DBUS_BUSNAME_ARMVE
from msa.core.logging import get_logger, StreamToLogger
from msa.core.logging.settings import LOG_CAPTURE_STDOUT

levantar_locales()
logger = get_logger("armve_service")

if LOG_CAPTURE_STDOUT:
    sys.stdout = StreamToLogger(logger, INFO)
    sys.stderr = StreamToLogger(logger, ERROR)


class ARMVEDBus(MSADbusService):
    """Server de DBus para ARMVE."""
    def __init__(self):
        """Constructor"""
        self.object_path = DBUS_ARMVE_PATH
        self.bus_name = DBUS_BUSNAME_ARMVE
        self._conn = False
        self.buffer = None
        self.printing = False
Exemplo n.º 18
0
                                         encodear_string_apertura)
from msa.core.documentos.structs import (struct_apertura, struct_recuento,
                                         struct_recuento_dni)
from msa.core.documentos.tabulacion import Pizarra
from msa.core.exceptions import (MesaNoEncontrada, QRMalformado,
                                 SerialRepetido, TagMalformado, TipoQrErroneo)
from msa.core.i18n.decorators import forzar_idioma
from msa.core.i18n.settings import DEFAULT_LOCALE
from msa.core.imaging.acta import ImagenActa
from msa.core.imaging.qr import crear_qr
from msa.core.logging import get_logger
from msa.core.packing.settings import SMART_PACKING
from msa.core.settings import TOKEN
from six.moves import range, zip

logger = get_logger("core_documentos_actas")


if SMART_PACKING:
    from msa.core.packing.smart_numpacker import pack, unpack, MAXBITS
else:
    from msa.core.packing.numpacker import pack, unpack

from msa.core.packing.numpacker import pack_slow, unpack_slow


class Acta():
    def _encode_qr(self, qr):
        output = BytesIO()
        qr.save(output, format='PNG')
        qr_img_data = output.getvalue()
Exemplo n.º 19
0
from base64 import encodestring

from msa.core.config_manager import Config
from msa.core.imaging.helpers import init_jinja, xml2pil
from msa.core.logging import get_logger


logger = get_logger("imaging")
jinja_env = init_jinja()


class Imagen(object):

    """Clase base para las imagenes del modulo."""

    def generate_data(self):
        """Genera la data para enviar al template."""
        raise NotImplementedError("You must implement on subclass")

    def render_template(self):
        self.rendered_template = jinja_env.get_template(self.template)

    def render_svg(self):
        """Renderiza el SVG."""
        data = self.generate_data()
        xml = self.rendered_template.render(**data)
        return xml

    def render_image(self):
        """Renderiza la imagen."""
        xml = self.render_svg()