MarkoprintWiFi/MkpWIFI/protocol.py

72 lines
2.2 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Sep 27 14:35:31 2019
@author: Guido Longoni - guidolongoni@gmail.com
"""
import commands as cmd
import re
def cmdString(cmdName, **cmdArgs):
cmdDict = cmd.MKPcommands[cmdName]
mandatory_args = set(cmdDict['args'])
if 'optArgs' in cmdDict and cmdDict['optArgs'] is not None:
optional_args = set(cmdDict['optArgs'])
else:
optional_args = set()
my_args = set(cmdArgs.keys())
if len(my_args) < len(mandatory_args) or my_args.intersection(mandatory_args) != my_args:
raise ValueError('Argomenti obbligatori errati o mancanti.')
if len(my_args-mandatory_args-optional_args) > 0:
raise Warning('Forniti argomenti sconosciuti!')
argDict = { ** { a: cmdArgs[a] for a in mandatory_args},
** { a: cmdArgs[a] if a in my_args else '' for a in optional_args} }
arg_groups = [i.group(1) for i in re.finditer(r'[^;]((\{[^}]*\};)+\{[^}]*\})[^;]',cmd.MKPcommands[cmdName]['command'])]
replacements = [(g,';'.join([a.format(**argDict) for a in g.split(';') if len(a.format(**argDict)) > 0])) for g in arg_groups]
return str(cmd.DEFprefix['begin'] if cmdDict['defPrefix'] else cmdDict['begin']) \
+ re.sub(r';+', ';', cmdDict['command'].format(**argDict)) \
+ str(cmd.DEFprefix['end']
if cmdDict['defPrefix'] else cmdDict['end'])
def checkResponse(cmdName, response):
sucKey = 'success'
cmdDict = cmd.MKPcommands[cmdName]
if sucKey in cmdDict and cmdDict[sucKey] is not None:
if cmdDict[sucKey] == True:
error = checkError(cmdName, response)
if error is None:
return None
else:
return error
if re.match(cmdDict[sucKey], response, re.I):
return True
error = checkError(cmdName, response)
if error is None:
raise NotImplementedError(
'Ricevuta risposta sconosciuta: {}'.format(response))
else:
return error
else:
error = checkError(cmdName, response)
return error
def checkError(cmdName, response):
errKey = 'error'
cmdDict = cmd.MKPcommands[cmdName]
if errKey in cmdDict and cmdDict[errKey] is not None:
return None
error_codes = re.match(cmdDict[errKey], response, re.I)
if error_codes:
return error_codes.groups()
return None
testala=cmdString('callPrintImage',imageName='Pippus',printMode='10',fieldContent='qualcosa\rqualcosaltro\rciao')