Ejemplo n.º 1
0
 def cancel():
     response = makeRequest(
         actions.COMMAND_CANCEL,
         translatePrinterNamesToPrinterObjects(
             getSelectedPrinters(), loadConfig(PRINTERS_CONFIG_PATH)))
     makeRequest(
         actions.COMMAND_REMOVE_ALL_FILES,
         translatePrinterNamesToPrinterObjects(
             getSelectedPrinters(), loadConfig(PRINTERS_CONFIG_PATH)))
     return json.dumps(response)
Ejemplo n.º 2
0
 def loadFile(fileName):
     response = makeRequest(
         actions.COMMAND_LOAD_FILE,
         translatePrinterNamesToPrinterObjects(
             getSelectedPrinters(), loadConfig(PRINTERS_CONFIG_PATH)),
         fileName)
     return json.dumps(response)
Ejemplo n.º 3
0
    def printer():
        response = makeRequest(
            actions.COMMAND_PRINT,
            translatePrinterNamesToPrinterObjects(
                getSelectedPrinters(), loadConfig(PRINTERS_CONFIG_PATH)))

        return json.dumps(response)
Ejemplo n.º 4
0
 def load():
     file = request.files['file']
     filename = secure_filename(file.filename)
     file.save(os.path.join('data','file.gco'))
     response = makeRequest(actions.COMMAND_LOAD,
                 translatePrinterNamesToPrinterObjects(getSelectedPrinters(), loadConfig(PRINTERS_CONFIG_PATH)),filename)
     return json.dumps(response)
Ejemplo n.º 5
0
    def shutdown(target):
        printers = []
        if(target == 'farm'):
            printers = loadConfig(PRINTERS_CONFIG_PATH)['printers'].keys()
        elif(target == 'printers'):
            printers = getSelectedPrinters()

        response = makeRequest(actions.COMMAND_SHUTDOWN,
                    translatePrinterNamesToPrinterObjects(printers, loadConfig(PRINTERS_CONFIG_PATH)))

        if(target == 'farm'):
            shutdownCommand = loadFromFile(SHUTDOWN_SCRIPT_PATH)
            shutdownCommand = shutdownCommand.splitlines()
            for command in shutdownCommand:
                os.system(command)

        return json.dumps(response)
Ejemplo n.º 6
0
    def preheat():
        print(request.form['tool'])
        print(request.form['bed'])
        print(request.form['selectedPrinters'])

        response = makeRequest(actions.COMMAND_PREHEAT,
                    translatePrinterNamesToPrinterObjects(getSelectedPrinters(), loadConfig(PRINTERS_CONFIG_PATH)),toolTemperature=request.form['tool'], bedTemperature=request.form['bed'])
        return json.dumps(response)
Ejemplo n.º 7
0
    def load():
        file = request.files['file']
        filename = secure_filename(file.filename)
        tf = tempfile.NamedTemporaryFile(delete=False)
        tf.close()
        file.save(tf.name)

        response = makeRequest(actions.COMMAND_LOAD,
                               translatePrinterNamesToPrinterObjects(
                                   getSelectedPrinters(),
                                   loadConfig(PRINTERS_CONFIG_PATH)),
                               filename,
                               tempFileName=tf.name)
        os.remove(tf.name)
        return json.dumps(response)
Ejemplo n.º 8
0
 def deleteOld():
     response = makeRequest(
         actions.COMMAND_REMOVE_ALL_FILES,
         translatePrinterNamesToPrinterObjects(
             getSelectedPrinters(), loadConfig(PRINTERS_CONFIG_PATH)))
     return "ok boomer"
Ejemplo n.º 9
0
async def run():
    global previousPrinterState
    urlJobs = "http://{address}:{port}/api/job"
    urlPrinter = "http://{address}:{port}/api/printer"
    tasks = []
    config = loadConfig('config/printers.yml')
    async with ClientSession() as session:
        printers = config['printers']
        for key in config['printers']:
            task = asyncio.ensure_future(
                fetch(
                    urlJobs.format(address=printers[key]['address'],
                                   port=printers[key]['port']), session,
                    printers[key]['apiKey'], key, JOB_INFO))
            tasks.append(task)
            task = asyncio.ensure_future(
                fetch(
                    urlPrinter.format(address=printers[key]['address'],
                                      port=printers[key]['port']), session,
                    printers[key]['apiKey'], key, PRINTER_INFO))
            tasks.append(task)

        responses = await asyncio.gather(*tasks)

        data = {}
        fakePrinterState = {}
        if (os.path.isfile(FAKE_PRINTER_STATE_PATH)):
            fakePrinterState = loadJsonObject(FAKE_PRINTER_STATE_PATH)
            # print(fakePrinterState)
        else:
            for key in config['printers']:
                fakePrinterState[key] = False

        for key in config['printers']:
            response_data_printer = {}
            response_data_job = {}
            for response in responses:
                if (response[1] == key):
                    try:
                        if (response[2] == PRINTER_INFO
                                and response[0] != UNREACHABLE):
                            response_data_printer = json.loads(
                                response[0].decode('utf-8'))
                        elif (response[2] == JOB_INFO
                              and response[0] != UNREACHABLE):
                            response_data_job = json.loads(
                                response[0].decode('utf-8'))
                        else:
                            response_data_printer = UNREACHABLE
                            response_data_job = UNREACHABLE
                    except Exception as e:
                        response_data_printer = OFFLINE
                        response_data_job = OFFLINE
            if (response_data_printer != OFFLINE
                    and response_data_printer != UNREACHABLE):
                data[key] = {
                    'state':
                    'Finished' if fakePrinterState[key] == 'Finished' else
                    response_data_printer['state']['text'],
                    'progress':
                    response_data_job['progress']['completion'],
                    'nozzleTemperature':
                    response_data_printer['temperature']['tool0']['actual'],
                    'bedTemperature':
                    response_data_printer['temperature']['bed']['actual'],
                    'fileName':
                    response_data_job['job']['file']['name'],
                    'timePrinting':
                    response_data_job['progress']['printTime'],
                    'timeRemaining':
                    response_data_job['progress']['printTimeLeft'],
                }

                if (previousPrinterState):
                    if (isFinished(previousPrinterState[key], data[key])):
                        fakePrinterState[key] = 'Finished'
                        data[key]['state'] = 'Finished'

            elif (response_data_printer == OFFLINE):
                data[key] = getOfflinePrinterDictionary()
            elif (response_data_printer == UNREACHABLE):
                data[key] = getUnreachablePrinterDictionary()

        data_json = json.dumps({
            'timestamp': int(time.time()),
            'printers': data,
        })
        path = os.path.dirname(__file__)
        with open(os.path.join(path, 'data/printer-state.json'), 'w') as file:
            file.write(data_json)
        with open(os.path.join(path, FAKE_PRINTER_STATE_PATH), 'w') as file:
            file.write(json.dumps(fakePrinterState))
        previousPrinterState = data
Ejemplo n.º 10
0
import asyncio
from aiohttp import ClientSession
import json
import yaml
import time
from lib.utils import loadFromFile, loadConfig, getOfflinePrinterDictionary, getUnreachablePrinterDictionary, loadJsonObject
from lib.actionPermission import isFinished
import os

CONFIG = loadConfig('config/config.yml')
FAKE_PRINTER_STATE_PATH = 'data/fake-state.json'

JOB_INFO = 'JOB_INFO'
PRINTER_INFO = 'PRINTER_INFO'

UNREACHABLE = 'UNREACHABLE'
OFFLINE = 'OFFLINE'

previousPrinterState = False


async def fetch(url, session, apiKey, printer, dataType):
    headers = {
        'X-Api-Key': apiKey,
    }
    try:
        async with session.get(url, headers=headers, timeout=2) as response:
            response = await response.read()
            return response, printer, dataType
    except Exception as e:
        return UNREACHABLE, printer, dataType
Ejemplo n.º 11
0
def printerConfig():
    return json.dumps(removeUnnecessaryData(loadConfig('config/printers.yml')))