mirror of
https://github.com/bringout/oca-ocb-hw.git
synced 2026-04-18 07:22:07 +02:00
Initial commit: Hw packages
This commit is contained in:
commit
a9d00500da
161 changed files with 10506 additions and 0 deletions
85
odoo-bringout-oca-ocb-hw_drivers/hw_drivers/controllers/driver.py
Executable file
85
odoo-bringout-oca-ocb-hw_drivers/hw_drivers/controllers/driver.py
Executable file
|
|
@ -0,0 +1,85 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from base64 import b64decode
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import subprocess
|
||||
import time
|
||||
|
||||
from odoo import http, tools
|
||||
from odoo.modules.module import get_resource_path
|
||||
|
||||
from odoo.addons.hw_drivers.event_manager import event_manager
|
||||
from odoo.addons.hw_drivers.main import iot_devices, manager
|
||||
from odoo.addons.hw_drivers.tools import helpers
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class DriverController(http.Controller):
|
||||
@http.route('/hw_drivers/action', type='json', auth='none', cors='*', csrf=False, save_session=False)
|
||||
def action(self, session_id, device_identifier, data):
|
||||
"""
|
||||
This route is called when we want to make a action with device (take picture, printing,...)
|
||||
We specify in data from which session_id that action is called
|
||||
And call the action of specific device
|
||||
"""
|
||||
iot_device = iot_devices.get(device_identifier)
|
||||
if iot_device:
|
||||
iot_device.data['owner'] = session_id
|
||||
data = json.loads(data)
|
||||
|
||||
# Skip the request if it was already executed (duplicated action calls)
|
||||
iot_idempotent_id = data.get("iot_idempotent_id")
|
||||
if iot_idempotent_id:
|
||||
idempotent_session = iot_device._check_idempotency(iot_idempotent_id, session_id)
|
||||
if idempotent_session:
|
||||
_logger.info("Ignored request from %s as iot_idempotent_id %s already received from session %s",
|
||||
session_id, iot_idempotent_id, idempotent_session)
|
||||
return False
|
||||
iot_device.action(data)
|
||||
return True
|
||||
return False
|
||||
|
||||
@http.route('/hw_drivers/check_certificate', type='http', auth='none', cors='*', csrf=False, save_session=False)
|
||||
def check_certificate(self):
|
||||
"""
|
||||
This route is called when we want to check if certificate is up-to-date
|
||||
Used in iot-box cron.daily, deprecated since image 24_08 but needed for compatibility with the image 24_01
|
||||
"""
|
||||
helpers.get_certificate_status()
|
||||
|
||||
@http.route('/hw_drivers/event', type='json', auth='none', cors='*', csrf=False, save_session=False)
|
||||
def event(self, listener):
|
||||
"""
|
||||
listener is a dict in witch there are a sessions_id and a dict of device_identifier to listen
|
||||
"""
|
||||
req = event_manager.add_request(listener)
|
||||
|
||||
# Search for previous events and remove events older than 5 seconds
|
||||
oldest_time = time.time() - 5
|
||||
for event in list(event_manager.events):
|
||||
if event['time'] < oldest_time:
|
||||
del event_manager.events[0]
|
||||
continue
|
||||
if event['device_identifier'] in listener['devices'] and event['time'] > listener['last_event']:
|
||||
event['session_id'] = req['session_id']
|
||||
return event
|
||||
|
||||
# Wait for new event
|
||||
if req['event'].wait(50):
|
||||
req['event'].clear()
|
||||
req['result']['session_id'] = req['session_id']
|
||||
return req['result']
|
||||
|
||||
@http.route('/hw_drivers/download_logs', type='http', auth='none', cors='*', csrf=False, save_session=False)
|
||||
def download_logs(self):
|
||||
"""
|
||||
Downloads the log file
|
||||
"""
|
||||
if tools.config['logfile']:
|
||||
res = http.send_file(tools.config['logfile'], mimetype="text/plain", as_attachment=True)
|
||||
res.headers['Cache-Control'] = 'no-cache'
|
||||
return res
|
||||
Loading…
Add table
Add a link
Reference in a new issue