How to use qr method in localstack

Best Python code snippet using localstack_python

qr_reader.py

Source:qr_reader.py Github

copy

Full Screen

1#!/usr/bin/env python2# Implementazione della classe QR_Reader. 3# Stima la posa globale (wrt MAP frame) della carrozzina utilizzando le informazioni pubblicate dal nodo visp_auto_tracker.4# NB: I qr code devono essere orientati con l'angolo vuoto in basso a destra rispetto alla posizione iniziale della carrozzina.5#6# Modalita di funzionamento: 7# -) gazebo: viene usato l'orientamento da gazebo per la stima della posa8# -) odom: viene usato l'orientamento dall'odometria per la stima della posa9# -) imu: viene usato l'orientamento dall'imu per la stima della posa10# -) qr: l'orientamento viene stimato dall'inclinazione dell'immagine. in questa modalita, per la stima vengono usati solo dati ottenuti dall'immagine.11#12# Subscribed Topics:13# -) /visp_auto_tracker/object_position_covariance14# -) /visp_auto_tracker/code_message15# -) /odometry/ekf_odom solo in modalita odom16# -) /odometry/ground_truth_odom solo in modalita gazebo17# -) /imu/data solo in modalita imu18# 19# Published Topics:20# -) /qr_pose21# 22# Attributes: 23# -) pose: 4x4 matrix, posizione stimata24#25# Methods: 26# -) get_pose(): ritorna True se e possibile calcolare la posa, mettendo il risultato in obj.pose. Viceversa, ritorna False.27# -) publish(T): pubblica la posa (T 4x4) in formato PoseWithCovarianceStamped sull'output topic /qr_pose.28import rospy29import numpy as np30import tf31import math32from geometry_msgs.msg import PoseWithCovarianceStamped33from nav_msgs.msg import Odometry34from sensor_msgs.msg import Imu35from std_msgs.msg import String36class QR_Reader ():37 def __init__(self, mode = 'gazebo'):38 39 ############# Public Attributes #############40 41 self.pose = None # Tf finale MAP -> BASE_FOOTPRINT42 43 44 ############# Protected Attributes #############45 46 self.t = tf.TransformListener()47 48 self._mode = mode 49 self._available_modes = ("imu", "odom", "qr", "gazebo")50 self._check_params()51 52 self.qr_pos = np.ones((4,1)) # Posizione del qr dal topic object_position_covariance53 self.qr_orientation = [0,0,0,1] # Orientamento del qr dal topic object_position_covariance54 self.qr_covariance = None # Covarianza del qr dal topic object_position_covariance55 self.qr_map = np.zeros((3,1)) # Posizione assoluta del qr dal topic code_message56 self.model_orientation = [0,0,0,1] # Orientamento carrozzina dall'odometria57 self.imu_model_orientation = [0,0,0,1] # Orientamento carrozzina dall'imu58 self.gazebo_model_position = [None,None,None] # Posizione carrozzina da Gazebo59 self.gazebo_model_orientation = [0,0,0,1] # Orientamento carrozzina da Gazebo60 61 62 self.room = 0 # ID dell'ambiente (attualmente inutilizzato)63 self.qr_presence = False # Presenza o no di un qr nell'inquadratura 64 65 self.T_l2r = np.array([[1,0,0,0],[0,0,1,0],[0,1,0,0],[0,0,0,1]]) # T da frame immagine sx a dx66 self.R_imm_QR = np.array([[0,0,-1,0],[1,0,0,0],[0,-1,0,0],[0,0,0,1]]) # R da frame immagine dx a QR 67 self.T_cam_bf = None # Tf CAMERA_LINK -> BASE_FOOTPRINT68 self.R_cam = None # R CAM -> CAMERA_LINK69 70 self.qr_pos_sub = rospy.Subscriber("/visp_auto_tracker/object_position_covariance", PoseWithCovarianceStamped, self._qr_pos_callback)71 self.qr_msg_sub = rospy.Subscriber("/visp_auto_tracker/code_message", String, self._qr_msg_callback)72 if self._mode == "odom": 73 self.odom_sub = rospy.Subscriber("/odometry/ekf_odom", Odometry, self._odom_sub_callback)74 if self._mode == "gazebo": 75 self.gazebo_sub = rospy.Subscriber("/odometry/ground_truth_odom", Odometry, self._gazebo_sub_callback)76 if self._mode == "imu": 77 self.imu_sub = rospy.Subscriber("/imu/data", Imu, self._imu_sub_callback)78 79 self.pub = rospy.Publisher("qr_pose", PoseWithCovarianceStamped, queue_size = 10)80 81 self._exit_code = 0 82 rospy.on_shutdown(self._shutdown)83 self._init_transforms()84 85 rospy.loginfo("QR Reader started in %s mode." % self._mode)86 87 88 89 ############# Public Methods #############90 91 def get_pose (self):92 93 if self.qr_presence: 94 # Trasformo posizione e orientamento del qr da frame immagine sx a dx95 new_pos, new_quat = self._left_hand_to_right_hand_frame(self.T_l2r)96 97 # Trovo la rotazione R_qr per compensare la rotazione del frame immagine dovuta al yaw della carrozzina, per poi trasformarlo in QR98 R_qr = self._get_qr_orientation(new_quat)99 100 # Trasformo il vettore qr_pos dal frame immagine al frame QR, che e orientato come MAP e centrato nel qr code.101 R_qr_cam = tf.transformations.concatenate_matrices(R_qr,self.R_imm_QR)102 p_qr_cam = np.dot(R_qr_cam,new_pos) 103 104 # Calcolo la tf MAP -> QR. La traslazione corrisponde alle coordinate scritte nel qr code, mentre l'orientamento e lo stesso.105 T_map_qr = self.t.fromTranslationRotation(self.qr_map.T,(0,0,0,1))106 107 # Calcolo la tf QR -> CAM. La traslazione e il vettore trasformato p_qr_cam, la rotazione e l'orientamento della carrozzina.108 T_qr_cam = R_qr109 T_qr_cam[:,3] = p_qr_cam.T110 111 # Concateno le tf MAP -> QR -> CAM -> CAMERA_LINK -> BASE_FOOTPRINT112 T_map_bf = tf.transformations.concatenate_matrices(T_map_qr,T_qr_cam,self.R_cam,self.T_cam_bf)113 self.pose = T_map_bf114 return True115 return False116 117 def publish (self, T):118 119 pos = tf.transformations.translation_from_matrix(T)120 quat = tf.transformations.quaternion_from_matrix(T)121 122 msg = PoseWithCovarianceStamped()123 msg.header.stamp = rospy.Time.now()124 msg.header.frame_id = "map"125 msg.pose.pose.position.x = pos[0]126 msg.pose.pose.position.y = pos[1]127 msg.pose.pose.position.z = pos[2]128 msg.pose.pose.orientation.x = quat[0]129 msg.pose.pose.orientation.y = quat[1]130 msg.pose.pose.orientation.z = quat[2]131 msg.pose.pose.orientation.w = quat[3]132 133 msg.pose.covariance = self.qr_covariance134 135 self.pub.publish(msg)136 137 138 ############# Protected Methods #############139 140 def _exit_code_bindings (self, code):141 _errors = { 142 20: "Timeout occurred while waiting for transform.",143 21: "An error occurred while getting the transform.",144 } 145 146 _warnings = { 147 10: "", 148 } 149 150 _info = { 151 0: "QR Reader is shutting down.", 152 } 153 154 if code in _info.keys():155 code_type = 0156 exit_message = _info.get(code) 157 158 if code in _warnings.keys():159 code_type = 1160 exit_message = _warnings.get(code) 161 162 if code in _errors.keys():163 code_type = 2164 exit_message = _errors.get(code) 165 166 return (code_type, exit_message)167 168 def _shutdown(self):169 type, error_message = self._exit_code_bindings(self._exit_code)170 171 if type == 0:172 rospy.loginfo(error_message)173 if type == 1:174 rospy.logwarn(error_message)175 if type == 2:176 rospy.logerr(error_message)177 def _qr_pos_callback (self, msg): 178 self.qr_pos[0] = msg.pose.pose.position.x179 self.qr_pos[1] = msg.pose.pose.position.y180 self.qr_pos[2] = msg.pose.pose.position.z181 182 self.qr_orientation[0] = msg.pose.pose.orientation.x183 self.qr_orientation[1] = msg.pose.pose.orientation.y184 self.qr_orientation[2] = msg.pose.pose.orientation.z185 self.qr_orientation[3] = msg.pose.pose.orientation.w186 187 self.qr_covariance = msg.pose.covariance188 def _qr_msg_callback (self, msg):189 # Pattern del messaggio del QR: "#xx#yy#zz#rr" 190 if msg.data != "":191 _var = msg.data.split("#")192 self.qr_map[0] = _var[1]193 self.qr_map[1] = _var[2]194 self.qr_map[2] = _var[3]195 self.room = _var[4]196 self.qr_presence = True197 else:198 self.qr_presence = False199 200 def _odom_sub_callback (self, msg):201 202 self.model_orientation[0] = msg.pose.pose.orientation.x203 self.model_orientation[1] = msg.pose.pose.orientation.y204 self.model_orientation[2] = msg.pose.pose.orientation.z205 self.model_orientation[3] = msg.pose.pose.orientation.w206 207 def _gazebo_sub_callback (self, msg):208 self.gazebo_model_position[0] = msg.pose.pose.position.x209 self.gazebo_model_position[1] = msg.pose.pose.position.y210 self.gazebo_model_position[2] = msg.pose.pose.position.z211 212 self.gazebo_model_orientation[0] = msg.pose.pose.orientation.x213 self.gazebo_model_orientation[1] = msg.pose.pose.orientation.y214 self.gazebo_model_orientation[2] = msg.pose.pose.orientation.z215 self.gazebo_model_orientation[3] = msg.pose.pose.orientation.w216 217 def _imu_sub_callback (self, msg):218 219 self.imu_model_orientation[0] = msg.orientation.x220 self.imu_model_orientation[1] = msg.orientation.y221 self.imu_model_orientation[2] = msg.orientation.z222 self.imu_model_orientation[3] = msg.orientation.w223 224 def _init_transforms (self):225 226 try:227 self.t.waitForTransform("camera_link","base_footprint",rospy.Time(),rospy.Duration(4))228 except tf.Exception:229 self._exit_code = 20230 rospy.signal_shutdown("") 231 232 try:233 _T_cam_bf = self.t.lookupTransform("camera_link","base_footprint",rospy.Time(0))234 self.T_cam_bf = self.t.fromTranslationRotation(_T_cam_bf[0],_T_cam_bf[1])235 self.R_cam = tf.transformations.quaternion_matrix([ 0, -0.7071068, 0, 0.7071068 ]) # Rotazione tra BASE_FOOTPRINT (CAM) e CAMERA_LINK236 except tf.Exception:237 self._exit_code = 21238 rospy.signal_shutdown("")239 240 def _check_params (self):241 242 if not (self._mode in self._available_modes):243 rospy.logwarn("The param mode is not correct. The default gazebo mode will be used.")244 self._mode = "gazebo"245 def _get_qr_orientation (self, qr_orient):246 247 # La rotazione del frame immagine corrisponde all'angolo di yaw della carrozzina248 if self._mode == "imu":249 R_qr = self.t.fromTranslationRotation((0,0,0),self.imu_model_orientation)250 251 if self._mode == "odom":252 R_qr = self.t.fromTranslationRotation((0,0,0),self.model_orientation)253 254 if self._mode == "gazebo":255 R_qr = self.t.fromTranslationRotation((0,0,0),self.gazebo_model_orientation)256 257 # Ricostruisco la rotazione del frame immagine dall'orientamento del qr 258 if self._mode == "qr": 259 260 # Le matrici di rotazione R_1 e R_2 sono state trovate sperimentalmente.261 # Vale la relazione R_1 * R(qr_orientation) * R_2 = R(yaw) 262 # TODO: Inizialmente si puo stimare la R_2 da: R_1 * R(qr_orientation) * R_2 = I (il yaw iniziale e sempre 0). 263 # In questo modo si rende dinamico l'algoritmo rispetto all'orientamento dei qr.264 265 R_1 = np.array([[0,0,1,0],[1,0,0,0],[0,1,0,0],[0,0,0,1]])266 R_2 = np.array([[1,0,0,0],[0,0,-1,0],[0,1,0,0],[0,0,0,1]]) 267 268 R_qr_orient = self.t.fromTranslationRotation((0,0,0),qr_orient)269 _R_qr = tf.transformations.concatenate_matrices(R_1, R_qr_orient, R_2)270 271 # Normalizzo la R_qr considerando una rotazione elementare sull'asse Z.272 R_qr = self._yaw_rotation_normalization(_R_qr)273 274 return R_qr275 276 def _left_hand_to_right_hand_frame (self, T):277 278 T_inv = np.linalg.inv(T)279 T_left = self.t.fromTranslationRotation(self.qr_pos[0:3].T,self.qr_orientation)280 T_right = tf.transformations.concatenate_matrices(T, T_left, T_inv) 281 282 pos = tf.transformations.translation_from_matrix(T_right)283 quat = tf.transformations.quaternion_from_matrix(T_right)284 return (np.append(pos,[1]), quat)285 286 def _yaw_rotation_normalization (self, R):287 288 roll, pitch, yaw = tf.transformations.euler_from_matrix(R)289 R_norm = tf.transformations.euler_matrix(0,0,yaw)290 291 return R_norm292 293#################################################################################################################################################294if __name__ == "__main__":295 rospy.init_node('qr_reader')296 297 # Check for mode param298 if rospy.has_param('~mode'):299 mode = rospy.get_param('~mode')300 obj = QR_Reader(mode) 301 else:302 obj = QR_Reader()303 304 rate = rospy.Rate(10) 305 rospy.sleep(0.5)306 307 try:308 while not rospy.is_shutdown():309 310 result = obj.get_pose()311 312 if result:313 T = obj.pose314 obj.publish(T)315 316 rate.sleep() 317 318 except rospy.exceptions.ROSInterruptException:319 pass...

Full Screen

Full Screen

Sensor_QR.py

Source:Sensor_QR.py Github

copy

Full Screen

1# -*- coding: utf-8 -*-2import serial3import os, time4import commands5import lib.Control_Archivos as Ca6from serial import SerialException7import RPi.GPIO as GPIO #Libreria Python GPIO8GPIO.setmode (GPIO.BOARD)9 #chicharra10CC_Pin = 3111GPIO.setup(CC_Pin, GPIO.OUT)12GPIO.output(CC_Pin, GPIO.HIGH)13Leer = Ca.Leer_Led14Borrar = Ca.Borrar_Archivo15Escrivir_Estados = Ca.Escrivir_Estados16Escrivir = Ca.Escrivir_Archivo17Leer_Estado = Ca.Leer_Estado18# Enable Serial Communication19#res = commands.getoutput('ls /dev/ttyACM*')20Puerto_Serial = '/dev/ttyS0'21print Puerto_Serial22port = serial.Serial(Puerto_Serial, baudrate=9600, timeout=1)23#port = serial.Serial(Puerto_Serial, baudrate=57600, timeout=1)24"""25port =026while True:27 #res = commands.getoutput('ls /dev/ttyACM*')28 res = commands.getoutput('/dev/ttyS0')29 print res#.find("/dev/ttyACM*")30 if res.find("/dev/ttyACM*") == -1:31 print 'abrir puerto'32 #port.close()33 port = serial.Serial(res, baudrate=9600, timeout=1)34 break35"""36#port = serial.Serial(res, baudrate=9600, timeout=1)37#port = serial.Serial("/dev/ttyACM0", baudrate=9600, timeout=1)38#port.write('Inofrmacion serial'+'\n\r')39Eliminar_antes=040N_Cade=041C_armar=''42QR =''43QR_antes =''44Tinicio =045Tfin =046Tdiferencia =047TRepeticion = 248#---------------------49def Log_QR():50 Contador = str(int(Leer_Estado(12))+1)51 print 'Log QR: '+ Contador52 Borrar(12) # Borrar QR53 Escrivir(Contador,12) # Guardar QR54def Leer_datos_SensorQR():55 global Eliminar_antes56 global N_Cade57 global C_armar58 global QR59 global QR_antes60 global B_sensor61 global Tinicio62 global Tfin63 global Tdiferencia64 global TRepeticion65 global port66 global res67 while True:68 try :69 #-------------------------------70 #Para dispotitos CCCB71 #-------------------------------72 rele = Leer_Estado(38)73 if len(rele)>= 1:74 print rele75 port.write(rele)76 Borrar(38)77 #-------------------------------78 rcv = port.read(250)79 #-----------------------------------------80 # Analisis de Cadenas recojidas81 #-----------------------------------------82 T_rcv = len(rcv)83 #print T_rcv84 if T_rcv >= 1:85 QRT = rcv.split('\r')86 #print QRT87 for x in QRT:88 #print 'x Procesando: '+x89 N_Cade +=190 TaCadena = len (x)91 Inicio = x[0:1]92 Fin = x[TaCadena-1:TaCadena]93 if (Inicio == '<' ) and (Fin == '>'):94 N_Cade=095 C_armar=''96 QR = x97 if QR != QR_antes:98 #print 'OK QR: '+QR99 #-----------------------------------------100 Tfin = time.time()101 Tdiferencia = Tfin - Tinicio102 if Tdiferencia >= TRepeticion:103 print 'Procesar:'+QR + ' T_Diferencia:'+ str(Tdiferencia)104 QR_antes = QR105 QR = QR.replace ("<","")106 QR = QR.replace (">","")107 #Log_QR()108 Borrar(7) # Borrar QR109 Escrivir(QR,7) # Guardar QR110 Escrivir_Estados('1',8) # Cambiar estado del QR111 B_sensor = 2112 Tinicio = time.time()113 #-----------------------------------------114 else:115 #Log_QR()116 # si la foma es la del tiiqued proceesar denuevo117 puntos = QR.count(".")118 print puntos119 if puntos == 3:120 Escrivir_Estados('1',8) # Cambiar estado del QR121 else:122 Escrivir_Estados('2',11) # Estado QR repetido123 print 'QR YA: ' +QR124 else:125 C_armar=C_armar + x126 if (C_armar[0:1] == '<' ) and (C_armar[len (C_armar)-1:len (C_armar)] == '>'):127 QR = C_armar128 if QR != QR_antes:129 #print 'OK QR: '+QR130 #-----------------------------------------131 Tfin = time.time()132 Tdiferencia = Tfin - Tinicio133 if Tdiferencia >= TRepeticion:134 print 'Procesar:'+QR + ' T_Diferencia:'+ str(Tdiferencia)135 QR_antes = QR136 QR = QR.replace ("<","")137 QR = QR.replace (">","")138 #Log_QR()139 Borrar(7) # Borrar QR140 Escrivir(QR,7) # Guardar QR141 Escrivir_Estados('1',8) # Cambiar estado del QR142 B_sensor = 2143 Tinicio = time.time()144 #-----------------------------------------145 else:146 #Log_QR()147 puntos = QR.count(".")148 print puntos149 if puntos == 3:150 Escrivir_Estados('1',8) # Cambiar estado del QR151 else:152 Escrivir_Estados('2',11) # Estado QR repetido153 print 'QR YA: ' +QR154 N_Cade=0155 C_armar=''156 else:157 if len(x) >=2:158 if (Inicio == '<' ) or (Fin == '>'):159 a=0160 #print 'pertenese a un qr valido'161 else:162 print 'NO cumple parametros'163 print 'X: '+x164 QR = x165 if QR != QR_antes:166 #print 'X QR: '+QR167 QR_antes = QR168 print 'que pasa'169 if QR.find("Igual") != -1:170 """171 aqr = Leer_Estado(7) #QR172 aqr= aqr.strip()173 puntos = aqr.count(".")174 print puntos175 if puntos == 3:176 Escrivir_Estados('1',8) # Cambiar estado del QR177 else:178 Escrivir_Estados('2',11) # Estado QR repetido179 print 'QR YA: ' +QR180 """181 Escrivir_Estados('2',11) # Estado QR repetido182 print "Repetido"183 else:184 #Log_QR()185 Borrar(7) # Borrar QR186 Escrivir(QR,7) # Guardar QR187 Escrivir_Estados('1',8) # Cambiar estado del QR188 B_sensor = 2189 else:190 if QR.find("Igual") != -1:191 Escrivir_Estados('2',11) # Estado QR repetido192 print 'QR YA: ' +QR193 """194 aqr = Leer_Estado(7) #QR195 aqr= aqr.strip()196 puntos = aqr.count(".")197 print puntos198 if puntos == 3:199 Escrivir_Estados('1',8) # Cambiar estado del QR200 """201 else :202 Escrivir_Estados('2',11) # Estado QR repetido203 print 'QR YA: ' +QR204 205 print 'mmm'206 #----------------------------------207 # fin del for208 N_Cade = 0209 else:210 # Descartar por tiempo espirado211 Eliminar_antes +=1212 if Eliminar_antes >=5:213 #print 'Borado de cadenas y puesta en zero'214 Eliminar_antes=0215 N_Cade=0216 C_armar=''217 B_sensor = 0218 #print 'salida del while'219 break220 except SerialException:221 print 'algo paso'222 #port.close()223 while True:224 port = serial.Serial(Puerto_Serial, baudrate=9600, timeout=1)225 break226 """227 res = commands.getoutput('ls /dev/ttyACM*')228 print res#.find("/dev/ttyACM*")229 if res.find("/dev/ttyACM*") == -1:230 print 'abrir puerto'231 port.close()232 port = serial.Serial(res, baudrate=9600, timeout=1)233 break234 """235 #res=res.replace('"',"")236 #res=res.replace('\n',"")237 #redes =res.split("ESSID:")238 #---------------------------------------239 # fin de analisis de cadena240 #---------------------------------------241#---------------------242C_Sensor_IR_en_UNO = 0243B_sensor=0244Estado_Antes=0245GPIO.output(CC_Pin, GPIO.LOW)246while 1:...

Full Screen

Full Screen

tests.py

Source:tests.py Github

copy

Full Screen

1import six2import qrcode3import qrcode.util4import qrcode.image.svg5try:6 import qrcode.image.pure7 import pymaging_png # ensure that PNG support is installed8except ImportError:9 pymaging_png = None10from qrcode.exceptions import DataOverflowError11from qrcode.util import (12 MODE_NUMBER, MODE_ALPHA_NUM, MODE_8BIT_BYTE)13try:14 import unittest2 as unittest15except ImportError:16 import unittest17UNICODE_TEXT = u'\u03b1\u03b2\u03b3'18class QRCodeTests(unittest.TestCase):19 def test_basic(self):20 qr = qrcode.QRCode(version=1)21 qr.add_data('a')22 qr.make(fit=False)23 def test_overflow(self):24 qr = qrcode.QRCode(version=1)25 qr.add_data('abcdefghijklmno')26 self.assertRaises(DataOverflowError, qr.make, fit=False)27 def test_fit(self):28 qr = qrcode.QRCode()29 qr.add_data('a')30 qr.make()31 self.assertEqual(qr.version, 1)32 qr.add_data('bcdefghijklmno')33 qr.make()34 self.assertEqual(qr.version, 2)35 def test_mode_number(self):36 qr = qrcode.QRCode()37 qr.add_data('1234567890123456789012345678901234', optimize=0)38 qr.make()39 self.assertEqual(qr.version, 1)40 self.assertEqual(qr.data_list[0].mode, MODE_NUMBER)41 def test_mode_alpha(self):42 qr = qrcode.QRCode()43 qr.add_data('ABCDEFGHIJ1234567890', optimize=0)44 qr.make()45 self.assertEqual(qr.version, 1)46 self.assertEqual(qr.data_list[0].mode, MODE_ALPHA_NUM)47 def test_regression_mode_comma(self):48 qr = qrcode.QRCode()49 qr.add_data(',', optimize=0)50 qr.make()51 self.assertEqual(qr.data_list[0].mode, MODE_8BIT_BYTE)52 def test_mode_8bit(self):53 qr = qrcode.QRCode()54 qr.add_data(u'abcABC' + UNICODE_TEXT, optimize=0)55 qr.make()56 self.assertEqual(qr.version, 1)57 self.assertEqual(qr.data_list[0].mode, MODE_8BIT_BYTE)58 def test_mode_8bit_newline(self):59 qr = qrcode.QRCode()60 qr.add_data('ABCDEFGHIJ1234567890\n', optimize=0)61 qr.make()62 self.assertEqual(qr.data_list[0].mode, MODE_8BIT_BYTE)63 def test_render_svg(self):64 qr = qrcode.QRCode()65 qr.add_data(UNICODE_TEXT)66 img = qr.make_image(image_factory=qrcode.image.svg.SvgImage)67 img.save(six.BytesIO())68 def test_render_svg_path(self):69 qr = qrcode.QRCode()70 qr.add_data(UNICODE_TEXT)71 img = qr.make_image(image_factory=qrcode.image.svg.SvgPathImage)72 img.save(six.BytesIO())73 @unittest.skipIf(not pymaging_png, "Requires pymaging with PNG support")74 def test_render_pymaging_png(self):75 qr = qrcode.QRCode()76 qr.add_data(UNICODE_TEXT)77 img = qr.make_image(image_factory=qrcode.image.pure.PymagingImage)78 img.save(six.BytesIO())79 def test_optimize(self):80 qr = qrcode.QRCode()81 text = 'A1abc12345def1HELLOa'82 qr.add_data(text, optimize=4)83 qr.make()84 self.assertEqual(len(qr.data_list), 5)85 self.assertEqual(qr.data_list[0].mode, MODE_8BIT_BYTE)86 self.assertEqual(qr.data_list[1].mode, MODE_NUMBER)87 self.assertEqual(qr.data_list[2].mode, MODE_8BIT_BYTE)88 self.assertEqual(qr.data_list[3].mode, MODE_ALPHA_NUM)89 self.assertEqual(qr.data_list[4].mode, MODE_8BIT_BYTE)90 self.assertEqual(qr.version, 2)91 def test_optimize_size(self):92 text = 'A1abc12345123451234512345def1HELLOHELLOHELLOHELLOa' * 593 qr = qrcode.QRCode()94 qr.add_data(text)95 qr.make()96 self.assertEqual(qr.version, 10)97 qr = qrcode.QRCode()98 qr.add_data(text, optimize=0)99 qr.make()100 self.assertEqual(qr.version, 11)101 def test_qrdata_repr(self):102 data = b'hello'103 data_obj = qrcode.util.QRData(data)...

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run localstack automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful