Best Python code snippet using keyboard
1-LECC+MAINCODE(LECTURES).py
Source:1-LECC+MAINCODE(LECTURES).py  
...230231            window.clear()232            window.bgpic('LEC C & C++ BCG.png')233            turtle.onscreenclick(btnclicksecondpage,1)234            turtle.listen()235236    if Button_x_c <= x <= Button_x_c + ButtonLength_c:237        if Button_y_c <= y <= Button_y_c + ButtonWidth_c:238239            window.clear()240            window.bgpic('LEC C & C++ BCG.png')241            turtle.onscreenclick(btnclicksecondpageC,1)242            turtle.listen()243244    if distance((Button_x_aboutus_circle,Button_y_aboutus_cirlce),(x,y)) <= Button_R_aboutus_circle**2:245246            window.clear()247            window.bgpic('ABOUT US.png')248            turtle.onscreenclick(btnclickaboutusreturn,1)249            turtle.listen()250251    if Button_x_what <= x <= Button_x_what + ButtonLength_what:252        if Button_y_what <= y <= Button_y_what + ButtonWidth_what:253254            window.clear()255            window.bgpic('WHAT IS PROGRAMMING.png')256            turtle.onscreenclick(btnclickwip,1)257            turtle.listen()258259    if distance((Button_x_what_circle,Button_y_what_cirlce),(x,y)) <= Button_R_what_circle**2:260261            window.clear()262            window.bgpic('WHAT IS PROGRAMMING.png')263            turtle.onscreenclick(btnclickwip,1)264            turtle.listen()265266    if Button_x_why <= x <= Button_x_why + ButtonLength_why:267        if Button_y_why <= y <= Button_y_why + ButtonWidth_why:268269            window.clear()270            window.bgpic('WHY SHOULD WE LEARN PROGRAMMING.png')271            turtle.onscreenclick(btnclickwswlp,1)272            turtle.listen()273274    if distance((Button_x_why_circle,Button_y_why_cirlce),(x,y)) <= Button_R_why_circle**2:275276            window.clear()277            window.bgpic('WHY SHOULD WE LEARN PROGRAMMING.png')278            turtle.onscreenclick(btnclickwswlp,1)279            turtle.listen()280281    if Button_x_play <= x <= Button_x_play + ButtonLength_play:282        if Button_y_play <= y <= Button_y_play + ButtonWidth_play:283284            window.clear()285            window.bgpic('GAME_FRONT_PAGE.png')286            turtle.onscreenclick(btnclickplay,1)287            turtle.listen()288289290291292293294295#Function that returns you back to homepage from button "play"296def btnclickplay(x,y):297    if distance((Button_x_play_return_circle,Button_y_play_return_circle),(x,y)) <= Button_R_play_return_circle**2:298299            window.clear()300            window.bgpic('FRONT.png')301            turtle.onscreenclick(btnclickfirstpage,1)302            turtle.listen()303304    if Button_x_how <= x <= Button_x_how + ButtonLength_how:305        if Button_y_how <= y <= Button_y_how + ButtonWidth_how:306307            window.clear()308            window.bgpic('HOW TO PLAY.png')309            turtle.onscreenclick(btnclickhowtoplayreturn,1)310            turtle.listen()311312    if Button_x_play2 <= x <= Button_x_play2 + ButtonLength_play2:313        if Button_y_play2 <= y <= Button_y_play2 + ButtonWidth_play2:314315            window.clear()316            window.bgpic('GAME!!!')317            turtle.onscreenclick(printcoordinates,1)318            turtle.listen()319320321322#Function that returns you back from how to play323def btnclickhowtoplayreturn(x,y):324    if distance((Button_x_how_return_circle,Button_y_how_return_circle),(x,y)) <= Button_R_how_return_circle**2:325326            window.clear()327            window.bgpic('GAME_FRONT_PAGE.png')328            turtle.onscreenclick(btnclickplay,1)329            turtle.listen()330331332#Function that returns you back from about us to home333def btnclickaboutusreturn(x,y):334    if distance((Button_x_aboutus_return_circle,Button_y_aboutus_return_circle),(x,y)) <= Button_R_aboutus_return_circle**2:335336            window.clear()337            window.bgpic('FRONT.png')338            turtle.onscreenclick(btnclickfirstpage,1)339            turtle.listen()340341#Return button function for WHAT IS PROGRAMMING page342def btnclickwip(x,y):343344    if distance((Button_x_returnwip,Button_y_returnwip),(x,y)) <= Button_R_returnwip**2:345346            window.clear()347            window.bgpic('FRONT.png')348            turtle.onscreenclick(btnclickfirstpage,1)349            turtle.listen()350351#Return button function for WHY SHOULD WE LEARN PROGRAMMING page352def btnclickwswlp(x,y):353354    if distance((Button_x_returnwswlp,Button_y_returnwswlp),(x,y)) <= Button_R_returnwswlp**2:355356            window.clear()357            window.bgpic('FRONT.png')358            turtle.onscreenclick(btnclickfirstpage,1)359            turtle.listen()360361#Function of the second page with buttons beginner and advanced C button362def btnclicksecondpageC(x,y):363364    if Button_x_begc <= x <= Button_x_begc + ButtonLength_begc:365        if Button_y_begc <= y <= Button_y_begc + ButtonWidth_begc:366367            window.clear()368            window.bgpic('LEC BCG.png')369            turtle.onscreenclick(btnclickthirdpagebegc,1)370            turtle.listen()371372    if Button_x_advc <= x <= Button_x_advc + ButtonLength_advc:373        if Button_y_advc <= y <= Button_y_advc + ButtonWidth_advc:374375            window.clear()376            window.bgpic('LEC BCG.png')377            turtle.onscreenclick(btnclickthirdpageadvC,1)378            turtle.listen()379380#Function of the second page with buttons beginner and advanced Cpp button381def btnclicksecondpage(x,y):382383384    if Button_x_begcpp <= x <= Button_x_begcpp + ButtonLength_begcpp:385        if Button_y_begcpp <= y <= Button_y_begcpp + ButtonWidth_begcpp:386387            window.clear()388            window.bgpic('LEC BCG.png')389            turtle.onscreenclick(btnclickthirdpagebegcpp,1)390            turtle.listen()391392    if Button_x_advcpp <= x <= Button_x_advcpp + ButtonLength_advcpp:393        if Button_y_advcpp <= y <= Button_y_advcpp + ButtonWidth_advcpp:394395            window.clear()396            window.bgpic('LEC BCG.png')397            turtle.onscreenclick(btnclickthirdpageadvCpp,1)398            turtle.listen()399400#Function of the third page beginner C - ENRIKETA's lectures401402def btnclickthirdpagebegc(x,y):403    if Button_x_lec1 <= x <= Button_x_lec1 + ButtonLength_lec1:404        if Button_y_lec1 <= y <= Button_y_lec1 + ButtonWidth_lec1:405406            window.clear()407            window.bgpic('LESSON 1 ENRIKETA-1.png')408            turtle.onscreenclick(btnclick_part1_tutorial1_begc,1)409            turtle.listen()410411    if Button_x_lec2 <= x <= Button_x_lec2 + ButtonLength_lec2:412        if Button_y_lec2 <= y <= Button_y_lec2 + ButtonWidth_lec2:413414            window.clear()415            window.bgpic('LESSON 2 ENRIKETA-1.png')416            turtle.onscreenclick(btnclick_part1_tutorial2_begc,1)417            turtle.listen()418419    if Button_x_lec3 <= x <= Button_x_lec3 + ButtonLength_lec3:420        if Button_y_lec3 <= y <= Button_y_lec3 + ButtonWidth_lec3:421422            window.clear()423            window.bgpic('LESSON 3 ENRIKETA-1.png')424            turtle.onscreenclick(btnclick_part1_tutorial3_begc,1)425            turtle.listen()426427    if Button_x_lec4 <= x <= Button_x_lec4 + ButtonLength_lec4:428        if Button_y_lec4 <= y <= Button_y_lec4 + ButtonWidth_lec4:429430            window.clear()431            window.bgpic('LESSON 4 ENRIKETA-1.png')432            turtle.onscreenclick(btnclick_part1_tutorial4_begc,1)433            turtle.listen()434435    if Button_x_lec5 <= x <= Button_x_lec5 + ButtonLength_lec5:436        if Button_y_lec5 <= y <= Button_y_lec5 + ButtonWidth_lec5:437438            window.clear()439            window.bgpic('LESSON 5 ENRIKETA-1.png')440            turtle.onscreenclick(btnclick_part1_tutorial5_begc,1)441            turtle.listen()442443    if Button_x_returnhm <= x <= Button_x_returnhm + ButtonLength_returnhm:444        if Button_y_returnhm <= y <= Button_y_returnhm + ButtonWidth_returnhm:445446            window.clear()447            window.bgpic('FRONT.png')448            turtle.onscreenclick(btnclickfirstpage,1)449            turtle.listen()450451    if distance((Button_x_returnhmcircle1,Button_y_returnhmcircle1),(x,y)) <= Button_R_returnhmcircle1**2:452453            window.clear()454            window.bgpic('FRONT.png')455            turtle.onscreenclick(btnclickfirstpage,1)456            turtle.listen()457458    if distance((Button_x_returnhmcircle2,Button_y_returnhmcircle2),(x,y)) <= Button_R_returnhmcircle2**2:459460            window.clear()461            window.bgpic('FRONT.png')462            turtle.onscreenclick(btnclickfirstpage,1)463            turtle.listen()464465#The following functions are Enriketa's lectures and the buttons for each page466#From lecture 1 till 5 (The last lecture)467#Inside the functions are included buttons: nextpage, previouspage, turntohomescreen, turntolectures, playagame(This one is located in the last lecture)468469def btnclick_part1_tutorial1_begc(x,y):470471    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:472        window.clear()473        window.bgpic('LESSON 1 ENRIKETA-2.png')474        turtle.onscreenclick(btnclick_part2_tutorial1_begc,1)475        turtle.listen()476477def btnclick_part2_tutorial1_begc(x,y):478479    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:480        window.clear()481        window.bgpic('LESSON 2 ENRIKETA-1.png')482        turtle.onscreenclick(btnclick_part1_tutorial2_begc,1)483        turtle.listen()484485    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:486        window.clear()487        window.bgpic('LESSON 1 ENRIKETA-1.png')488        turtle.onscreenclick(btnclick_part1_tutorial1_begc,1)489        turtle.listen()490491    if Button_x_returntolecture <= x <= Button_x_returntolecture+ButtonLength_returntolecture:492        if Button_y_returntolecture <= y <= Button_y_returntolecture+ButtonWidth_returntolecture:493            window.clear()494            window.bgpic('LEC BCG.png')495            turtle.onscreenclick(btnclickthirdpagebegc,1)496            turtle.listen()497498    if distance((Button_x_lecture_circle3_center,Button_y_lecture_circle3_center),(x,y)) <= Button_R_lecture_circle3_center**2:499        window.clear()500        window.bgpic('LEC BCG.png')501        turtle.onscreenclick(btnclickthirdpagebegc,1)502        turtle.listen()503504def btnclick_part1_tutorial2_begc(x,y):505506    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:507        window.clear()508        window.bgpic('LESSON 2 ENRIKETA-2.png')509        turtle.onscreenclick(btnclick_part2_tutorial2_begc,1)510        turtle.listen()511512def btnclick_part2_tutorial2_begc(x,y):513514    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:515        window.clear()516        window.bgpic('LESSON 3 ENRIKETA-1.png')517        turtle.onscreenclick(btnclick_part1_tutorial3_begc,1)518        turtle.listen()519520    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:521        window.clear()522        window.bgpic('LESSON 2 ENRIKETA-1.png')523        turtle.onscreenclick(btnclick_part1_tutorial2_begc,1)524        turtle.listen()525526    if Button_x_returntolecture <= x <= Button_x_returntolecture+ButtonLength_returntolecture:527        if Button_y_returntolecture <= y <= Button_y_returntolecture+ButtonWidth_returntolecture:528            window.clear()529            window.bgpic('LEC BCG.png')530            turtle.onscreenclick(btnclickthirdpagebegc,1)531            turtle.listen()532533    if distance((Button_x_lecture_circle3_center,Button_y_lecture_circle3_center),(x,y)) <= Button_R_lecture_circle3_center**2:534        window.clear()535        window.bgpic('LEC BCG.png')536        turtle.onscreenclick(btnclickthirdpagebegc,1)537        turtle.listen()538539def btnclick_part1_tutorial3_begc(x,y):540541    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:542        window.clear()543        window.bgpic('LESSON 4 ENRIKETA-1.png')544        turtle.onscreenclick(btnclick_part1_tutorial4_begc,1)545        turtle.listen()546547    if Button_x_returntolecture <= x <= Button_x_returntolecture+ButtonLength_returntolecture:548        if Button_y_returntolecture <= y <= Button_y_returntolecture+ButtonWidth_returntolecture:549            window.clear()550            window.bgpic('LEC BCG.png')551            turtle.onscreenclick(btnclickthirdpagebegc,1)552            turtle.listen()553554    if distance((Button_x_lecture_circle3_center,Button_y_lecture_circle3_center),(x,y)) <= Button_R_lecture_circle3_center**2:555        window.clear()556        window.bgpic('LEC BCG.png')557        turtle.onscreenclick(btnclickthirdpagebegc,1)558        turtle.listen()559560def btnclick_part1_tutorial4_begc(x,y):561562    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:563        window.clear()564        window.bgpic('LESSON 4 ENRIKETA-2.png')565        turtle.onscreenclick(btnclick_part2_tutorial4_begc,1)566        turtle.listen()567568def btnclick_part2_tutorial4_begc(x,y):569570    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:571        window.clear()572        window.bgpic('LESSON 4 ENRIKETA-3.png')573        turtle.onscreenclick(btnclick_part3_tutorial4_begc,1)574        turtle.listen()575576    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:577        window.clear()578        window.bgpic('LESSON 4 ENRIKETA-1.png')579        turtle.onscreenclick(btnclick_part1_tutorial3_begc,1)580        turtle.listen()581582def btnclick_part3_tutorial4_begc(x,y):583    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:584        window.clear()585        window.bgpic('LESSON 5 ENRIKETA-1.png')586        turtle.onscreenclick(btnclick_part1_tutorial5_begc,1)587        turtle.listen()588589    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:590        window.clear()591        window.bgpic('LESSON 4 ENRIKETA-3.png')592        turtle.onscreenclick(btnclick_part2_tutorial4_begc,1)593        turtle.listen()594595    if Button_x_returntolecture <= x <= Button_x_returntolecture+ButtonLength_returntolecture:596        if Button_y_returntolecture <= y <= Button_y_returntolecture+ButtonWidth_returntolecture:597            window.clear()598            window.bgpic('LEC BCG.png')599            turtle.onscreenclick(btnclickthirdpagebegc,1)600            turtle.listen()601602    if distance((Button_x_lecture_circle3_center,Button_y_lecture_circle3_center),(x,y)) <= Button_R_lecture_circle3_center**2:603        window.clear()604        window.bgpic('LEC BCG.png')605        turtle.onscreenclick(btnclickthirdpagebegc,1)606        turtle.listen()607608def btnclick_part1_tutorial5_begc(x,y):609    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:610        window.clear()611        window.bgpic('LESSON 5 ENRIKETA-2.png')612        turtle.onscreenclick(btnclick_part2_tutorial5_begc,1)613        turtle.listen()614615def btnclick_part2_tutorial5_begc(x,y):616    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:617        window.clear()618        window.bgpic('LESSON 5 ENRIKETA-3.png')619        turtle.onscreenclick(btnclick_part3_tutorial5_begc,1)620        turtle.listen()621622    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:623        window.clear()624        window.bgpic('LESSON 5 ENRIKETA-1.png')625        turtle.onscreenclick(btnclick_part1_tutorial5_begc,1)626        turtle.listen()627628def btnclick_part3_tutorial5_begc(x,y):629    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:630        window.clear()631        window.bgpic('LESSON 5 ENRIKETA-2.png')632        turtle.onscreenclick(btnclick_part1_tutorial5_begc,1)633        turtle.listen()634635    if Button_x_playfromlecture <= x <= Button_x_playfromlecture+ButtonLength_playfromlecture:636        if Button_y_playfromlecture <= y <= Button_y_playfromlecture+ButtonWidth_playfromlecture:637            window.clear()638            window.bgpic('GAME_FRONT_PAGE.png')639            turtle.onscreenclick(btnclickplay,1)640            turtle.listen()641642    if distance((Button_x_returnhm_lec_circle1_left,Button_y_returnhm_lec_circle1_left),(x,y)) <= Button_R_returnhm_lec_circle1_left**2:643        window.clear()644        window.bgpic('FRONT.png')645        turtle.onscreenclick(btnclickfirstpage,1)646        turtle.listen()647648    if distance((Button_x_returnhm_lec_circle1_right,Button_y_returnhm_lec_circle1_right),(x,y)) <= Button_R_returnhm_lec_circle1_right**2:649        window.clear()650        window.bgpic('FRONT.png')651        turtle.onscreenclick(btnclickfirstpage,1)652        turtle.listen()653654    if Button_x_returnhm_lec <= x <= Button_x_returnhm_lec+ButtonLength_returnhm_lec:655        if Button_y_returnhm_lec <= y <= Button_y_returnhm_lec+ButtonWidth_returnhm_lec:656            window.clear()657            window.bgpic('FRONT.png')658            turtle.onscreenclick(btnclickfirstpage,1)659            turtle.listen()660661#Function of the third page advanced C - EVA's lectures662663def btnclickthirdpageadvC(x,y):664    if Button_x_lec1 <= x <= Button_x_lec1 + ButtonLength_lec1:665        if Button_y_lec1 <= y <= Button_y_lec1 + ButtonWidth_lec1:666667            window.clear()668            window.bgpic('LESSON 1 EVA-1.png')669            turtle.onscreenclick(btnclick_part1_tutorial1_advc,1)670            turtle.listen()671672    if Button_x_lec2 <= x <= Button_x_lec2 + ButtonLength_lec2:673        if Button_y_lec2 <= y <= Button_y_lec2 + ButtonWidth_lec2:674675            window.clear()676            window.bgpic('LESSON 2 EVA-1.png')677            turtle.onscreenclick(btnclick_part1_tutorial2_advc,1)678            turtle.listen()679680    if Button_x_lec3 <= x <= Button_x_lec3 + ButtonLength_lec3:681        if Button_y_lec3 <= y <= Button_y_lec3 + ButtonWidth_lec3:682683            window.clear()684            window.bgpic('LESSON 3 EVA-1.png')685            turtle.onscreenclick(btnclick_part1_tutorial3_advc,1)686            turtle.listen()687688    if Button_x_lec4 <= x <= Button_x_lec4 + ButtonLength_lec4:689        if Button_y_lec4 <= y <= Button_y_lec4 + ButtonWidth_lec4:690691            window.clear()692            window.bgpic('LESSON 4 EVA-1.png')693            turtle.onscreenclick(btnclick_part1_tutorial4_advc,1)694            turtle.listen()695696    if Button_x_lec5 <= x <= Button_x_lec5 + ButtonLength_lec5:697        if Button_y_lec5 <= y <= Button_y_lec5 + ButtonWidth_lec5:698699            window.clear()700            window.bgpic('LESSON 5 EVA-1.png')701            turtle.onscreenclick(btnclick_part1_tutorial5_advc,1)702            turtle.listen()703704    if Button_x_returnhm <= x <= Button_x_returnhm + ButtonLength_returnhm:705        if Button_y_returnhm <= y <= Button_y_returnhm + ButtonWidth_returnhm:706707            window.clear()708            window.bgpic('FRONT.png')709            turtle.onscreenclick(btnclickfirstpage,1)710            turtle.listen()711712    if distance((Button_x_returnhmcircle1,Button_y_returnhmcircle1),(x,y)) <= Button_R_returnhmcircle1**2:713714            window.clear()715            window.bgpic('FRONT.png')716            turtle.onscreenclick(btnclickfirstpage,1)717            turtle.listen()718719    if distance((Button_x_returnhmcircle2,Button_y_returnhmcircle2),(x,y)) <= Button_R_returnhmcircle2**2:720721            window.clear()722            window.bgpic('FRONT.png')723            turtle.onscreenclick(btnclickfirstpage,1)724            turtle.listen()725726#The following functions are EVA's lectures and the buttons for each page727#From lecture 1 till 5 (The last lecture)728#Inside the functions are included buttons: nextpage, previouspage, turntohomescreen, turntolectures, playagame(This one is located in the last lecture)729730def btnclick_part1_tutorial1_advc(x,y):731732    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:733        window.clear()734        window.bgpic('LESSON 1 EVA-2.png')735        turtle.onscreenclick(btnclick_part2_tutorial1_advc,1)736        turtle.listen()737738def btnclick_part2_tutorial1_advc(x,y):739    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:740        window.clear()741        window.bgpic('LESSON 1 EVA-3.png')742        turtle.onscreenclick(btnclick_part3_tutorial1_advc,1)743        turtle.listen()744745    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:746        window.clear()747        window.bgpic('LESSON 1 EVA-1.png')748        turtle.onscreenclick(btnclick_part1_tutorial1_advc,1)749        turtle.listen()750751def btnclick_part3_tutorial1_advc(x,y):752    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:753        window.clear()754        window.bgpic('LESSON 2 EVA-1.png')755        turtle.onscreenclick(btnclick_part1_tutorial2_advc,1)756        turtle.listen()757758    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:759        window.clear()760        window.bgpic('LESSON 1 EVA-3.png')761        turtle.onscreenclick(btnclick_part2_tutorial1_advc,1)762        turtle.listen()763764    if Button_x_returntolecture <= x <= Button_x_returntolecture+ButtonLength_returntolecture:765        if Button_y_returntolecture <= y <= Button_y_returntolecture+ButtonWidth_returntolecture:766            window.clear()767            window.bgpic('LEC BCG.png')768            turtle.onscreenclick(btnclickthirdpageadvC,1)769            turtle.listen()770771    if distance((Button_x_lecture_circle3_center,Button_y_lecture_circle3_center),(x,y)) <= Button_R_lecture_circle3_center**2:772        window.clear()773        window.bgpic('LEC BCG.png')774        turtle.onscreenclick(btnclickthirdpageadvC,1)775        turtle.listen()776777def btnclick_part1_tutorial2_advc(x,y):778    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:779        window.clear()780        window.bgpic('LESSON 3 EVA-1.png')781        turtle.onscreenclick(btnclick_part1_tutorial3_advc,1)782        turtle.listen()783784    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:785        window.clear()786        window.bgpic('LESSON 2 EVA-1.png')787        turtle.onscreenclick(btnclick_part1_tutorial2_advc,1)788        turtle.listen()789790    if Button_x_returntolecture <= x <= Button_x_returntolecture+ButtonLength_returntolecture:791        if Button_y_returntolecture <= y <= Button_y_returntolecture+ButtonWidth_returntolecture:792            window.clear()793            window.bgpic('LEC BCG.png')794            turtle.onscreenclick(btnclickthirdpageadvC,1)795            turtle.listen()796797    if distance((Button_x_lecture_circle3_center,Button_y_lecture_circle3_center),(x,y)) <= Button_R_lecture_circle3_center**2:798        window.clear()799        window.bgpic('LEC BCG.png')800        turtle.onscreenclick(btnclickthirdpageadvC,1)801        turtle.listen()802803def btnclick_part1_tutorial3_advc(x,y):804    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:805        window.clear()806        window.bgpic('LESSON 3 EVA-2.png')807        turtle.onscreenclick(btnclick_part2_tutorial3_advc,1)808        turtle.listen()809810def btnclick_part2_tutorial3_advc(x,y):811    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:812        window.clear()813        window.bgpic('LESSON 4 EVA-1.png')814        turtle.onscreenclick(btnclick_part1_tutorial4_advc,1)815        turtle.listen()816817    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:818        window.clear()819        window.bgpic('LESSON 3 EVA-1.png')820        turtle.onscreenclick(btnclick_part1_tutorial3_advc,1)821        turtle.listen()822823    if Button_x_returntolecture <= x <= Button_x_returntolecture+ButtonLength_returntolecture:824        if Button_y_returntolecture <= y <= Button_y_returntolecture+ButtonWidth_returntolecture:825            window.clear()826            window.bgpic('LEC BCG.png')827            turtle.onscreenclick(btnclickthirdpageadvC,1)828            turtle.listen()829830    if distance((Button_x_lecture_circle3_center,Button_y_lecture_circle3_center),(x,y)) <= Button_R_lecture_circle3_center**2:831        window.clear()832        window.bgpic('LEC BCG.png')833        turtle.onscreenclick(btnclickthirdpageadvC,1)834        turtle.listen()835836def btnclick_part1_tutorial4_advc(x,y):837    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:838        window.clear()839        window.bgpic('LESSON 4 EVA-2.png')840        turtle.onscreenclick(btnclick_part2_tutorial4_advc,1)841        turtle.listen()842843def btnclick_part2_tutorial4_advc(x,y):844    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:845        window.clear()846        window.bgpic('LESSON 5 EVA-1.png')847        turtle.onscreenclick(btnclick_part1_tutorial5_advc,1)848        turtle.listen()849850    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:851        window.clear()852        window.bgpic('LESSON 4 EVA-1.png')853        turtle.onscreenclick(btnclick_part1_tutorial4_advc,1)854        turtle.listen()855856    if Button_x_returntolecture <= x <= Button_x_returntolecture+ButtonLength_returntolecture:857        if Button_y_returntolecture <= y <= Button_y_returntolecture+ButtonWidth_returntolecture:858            window.clear()859            window.bgpic('LEC BCG.png')860            turtle.onscreenclick(btnclickthirdpageadvC,1)861            turtle.listen()862863    if distance((Button_x_lecture_circle3_center,Button_y_lecture_circle3_center),(x,y)) <= Button_R_lecture_circle3_center**2:864        window.clear()865        window.bgpic('LEC BCG.png')866        turtle.onscreenclick(btnclickthirdpageadvC,1)867        turtle.listen()868869def btnclick_part1_tutorial5_advc(x,y):870    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:871        window.clear()872        window.bgpic('LESSON 5 EVA-2.png')873        turtle.onscreenclick(btnclick_part2_tutorial5_advc,1)874        turtle.listen()875876def btnclick_part2_tutorial5_advc(x,y):877878    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:879        window.clear()880        window.bgpic('LESSON 5 EVA-1.png')881        turtle.onscreenclick(btnclick_part1_tutorial5_advc,1)882        turtle.listen()883884    if Button_x_playfromlecture <= x <= Button_x_playfromlecture+ButtonLength_playfromlecture:885        if Button_y_playfromlecture <= y <= Button_y_playfromlecture+ButtonWidth_playfromlecture:886            window.clear()887            window.bgpic('GAME_FRONT_PAGE.png')888            turtle.onscreenclick(btnclickplay,1)889            turtle.listen()890891    if distance((Button_x_returnhm_lec_circle1_left,Button_y_returnhm_lec_circle1_left),(x,y)) <= Button_R_returnhm_lec_circle1_left**2:892        window.clear()893        window.bgpic('FRONT.png')894        turtle.onscreenclick(btnclickfirstpage,1)895        turtle.listen()896897    if distance((Button_x_returnhm_lec_circle1_right,Button_y_returnhm_lec_circle1_right),(x,y)) <= Button_R_returnhm_lec_circle1_right**2:898        window.clear()899        window.bgpic('FRONT.png')900        turtle.onscreenclick(btnclickfirstpage,1)901        turtle.listen()902903    if Button_x_returnhm_lec <= x <= Button_x_returnhm_lec+ButtonLength_returnhm_lec:904        if Button_y_returnhm_lec <= y <= Button_y_returnhm_lec+ButtonWidth_returnhm_lec:905            window.clear()906            window.bgpic('FRONT.png')907            turtle.onscreenclick(btnclickfirstpage,1)908            turtle.listen()909910#Function of the third page beginner CPP - KLAUDIA's lectures911912def btnclickthirdpagebegcpp(x,y):913    if Button_x_lec1 <= x <= Button_x_lec1 + ButtonLength_lec1:914        if Button_y_lec1 <= y <= Button_y_lec1 + ButtonWidth_lec1:915916            window.clear()917            window.bgpic('LESSON 1 KLAUDIA-1.png')918            turtle.onscreenclick(btnclick_part1_tutorial1_begcpp,1)919            turtle.listen()920921    if Button_x_lec2 <= x <= Button_x_lec2 + ButtonLength_lec2:922        if Button_y_lec2 <= y <= Button_y_lec2 + ButtonWidth_lec2:923924            window.clear()925            window.bgpic('LESSON 2 KLAUDIA-1.png')926            turtle.onscreenclick(btnclick_part1_tutorial2_begcpp,1)927            turtle.listen()928929    if Button_x_lec3 <= x <= Button_x_lec3 + ButtonLength_lec3:930        if Button_y_lec3 <= y <= Button_y_lec3 + ButtonWidth_lec3:931932            window.clear()933            window.bgpic('LESSON 3 KLAUDIA-1.png')934            turtle.onscreenclick(btnclick_part1_tutorial3_begcpp,1)935            turtle.listen()936937    if Button_x_lec4 <= x <= Button_x_lec4 + ButtonLength_lec4:938        if Button_y_lec4 <= y <= Button_y_lec4 + ButtonWidth_lec4:939940            window.clear()941            window.bgpic('LESSON 4 KLAUDIA-1.png')942            turtle.onscreenclick(btnclick_part1_tutorial4_begcpp,1)943            turtle.listen()944945    if Button_x_lec5 <= x <= Button_x_lec5 + ButtonLength_lec5:946        if Button_y_lec5 <= y <= Button_y_lec5 + ButtonWidth_lec5:947948            window.clear()949            window.bgpic('LESSON 5 KLAUDIA-1.png')950            turtle.onscreenclick(btnclick_part1_tutorial5_begcpp,1)951            turtle.listen()952953    if Button_x_returnhm <= x <= Button_x_returnhm + ButtonLength_returnhm:954        if Button_y_returnhm <= y <= Button_y_returnhm + ButtonWidth_returnhm:955956            window.clear()957            window.bgpic('FRONT.png')958            turtle.onscreenclick(btnclickfirstpage,1)959            turtle.listen()960961    if distance((Button_x_returnhmcircle1,Button_y_returnhmcircle1),(x,y)) <= Button_R_returnhmcircle1**2:962963            window.clear()964            window.bgpic('FRONT.png')965            turtle.onscreenclick(btnclickfirstpage,1)966            turtle.listen()967968    if distance((Button_x_returnhmcircle2,Button_y_returnhmcircle2),(x,y)) <= Button_R_returnhmcircle2**2:969970            window.clear()971            window.bgpic('FRONT.png')972            turtle.onscreenclick(btnclickfirstpage,1)973            turtle.listen()974975#The following functions are KLAUDIA's lectures and the buttons for each page976#From lecture 1 till 5 (The last lecture)977#Inside the functions are included buttons: nextpage, previouspage, turntohomescreen, turntolectures, playagame(This one is located in the last lecture)978979def btnclick_part1_tutorial1_begcpp(x,y):980981    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:982        window.clear()983        window.bgpic('LESSON 1 KLAUDIA-2.png')984        turtle.onscreenclick(btnclick_part2_tutorial1_begcpp,1)985        turtle.listen()986987988def btnclick_part2_tutorial1_begcpp(x,y):989    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:990        window.clear()991        window.bgpic('LESSON 2 KLAUDIA-1.png')992        turtle.onscreenclick(btnclick_part1_tutorial2_begcpp,1)993        turtle.listen()994995    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:996        window.clear()997        window.bgpic('LESSON 1 KLAUDIA-1.png')998        turtle.onscreenclick(btnclick_part1_tutorial1_begcpp,1)999        turtle.listen()10001001    if Button_x_returntolecture <= x <= Button_x_returntolecture+ButtonLength_returntolecture:1002        if Button_y_returntolecture <= y <= Button_y_returntolecture+ButtonWidth_returntolecture:1003            window.clear()1004            window.bgpic('LEC BCG.png')1005            turtle.onscreenclick(btnclickthirdpagebegcpp,1)1006            turtle.listen()10071008    if distance((Button_x_lecture_circle3_center,Button_y_lecture_circle3_center),(x,y)) <= Button_R_lecture_circle3_center**2:1009        window.clear()1010        window.bgpic('LEC BCG.png')1011        turtle.onscreenclick(btnclickthirdpagebegcpp,1)1012        turtle.listen()10131014def btnclick_part1_tutorial2_begcpp(x,y):10151016    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1017        window.clear()1018        window.bgpic('LESSON 2 KLAUDIA-2.png')1019        turtle.onscreenclick(btnclick_part2_tutorial2_begcpp,1)1020        turtle.listen()10211022def btnclick_part2_tutorial2_begcpp(x,y):1023    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1024        window.clear()1025        window.bgpic('LESSON 3 KLAUDIA-1.png')1026        turtle.onscreenclick(btnclick_part1_tutorial3_begcpp,1)1027        turtle.listen()10281029    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:1030        window.clear()1031        window.bgpic('LESSON 2 KLAUDIA-1.png')1032        turtle.onscreenclick(btnclick_part1_tutorial2_begcpp,1)1033        turtle.listen()10341035    if Button_x_returntolecture <= x <= Button_x_returntolecture+ButtonLength_returntolecture:1036        if Button_y_returntolecture <= y <= Button_y_returntolecture+ButtonWidth_returntolecture:1037            window.clear()1038            window.bgpic('LEC BCG.png')1039            turtle.onscreenclick(btnclickthirdpagebegcpp,1)1040            turtle.listen()10411042    if distance((Button_x_lecture_circle3_center,Button_y_lecture_circle3_center),(x,y)) <= Button_R_lecture_circle3_center**2:1043        window.clear()1044        window.bgpic('LEC BCG.png')1045        turtle.onscreenclick(btnclickthirdpagebegcpp,1)1046        turtle.listen()10471048def btnclick_part1_tutorial3_begcpp(x,y):10491050    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1051        window.clear()1052        window.bgpic('LESSON 3 KLAUDIA-2.png')1053        turtle.onscreenclick(btnclick_part2_tutorial3_begcpp,1)1054        turtle.listen()10551056def btnclick_part2_tutorial3_begcpp(x,y):1057    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1058        window.clear()1059        window.bgpic('LESSON 3 KLAUDIA-3.png')1060        turtle.onscreenclick(btnclick_part3_tutorial3_begcpp,1)1061        turtle.listen()10621063    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:1064        window.clear()1065        window.bgpic('LESSON 3 KLAUDIA-1.png')1066        turtle.onscreenclick(btnclick_part1_tutorial3_begcpp,1)1067        turtle.listen()10681069def btnclick_part3_tutorial3_begcpp(x,y):10701071    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1072        window.clear()1073        window.bgpic('LESSON 4 KLAUDIA-1.png')1074        turtle.onscreenclick(btnclick_part1_tutorial4_begcpp,1)1075        turtle.listen()10761077    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:1078        window.clear()1079        window.bgpic('LESSON 3 KLAUDIA-2.png')1080        turtle.onscreenclick(btnclick_part2_tutorial3_begcpp,1)1081        turtle.listen()10821083    if Button_x_returntolecture <= x <= Button_x_returntolecture+ButtonLength_returntolecture:1084        if Button_y_returntolecture <= y <= Button_y_returntolecture+ButtonWidth_returntolecture:1085            window.clear()1086            window.bgpic('LEC BCG.png')1087            turtle.onscreenclick(btnclickthirdpagebegcpp,1)1088            turtle.listen()10891090    if distance((Button_x_lecture_circle3_center,Button_y_lecture_circle3_center),(x,y)) <= Button_R_lecture_circle3_center**2:1091        window.clear()1092        window.bgpic('LEC BCG.png')1093        turtle.onscreenclick(btnclickthirdpagebegcpp,1)1094        turtle.listen()10951096def btnclick_part1_tutorial4_begcpp(x,y):10971098    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1099        window.clear()1100        window.bgpic('LESSON 4 KLAUDIA-2.png')1101        turtle.onscreenclick(btnclick_part2_tutorial4_begcpp,1)1102        turtle.listen()11031104def btnclick_part2_tutorial4_begcpp(x,y):1105    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1106        window.clear()1107        window.bgpic('LESSON 4 KLAUDIA-3.png')1108        turtle.onscreenclick(btnclick_part3_tutorial4_begcpp,1)1109        turtle.listen()11101111    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:1112        window.clear()1113        window.bgpic('LESSON 4 KLAUDIA-1.png')1114        turtle.onscreenclick(btnclick_part1_tutorial4_begcpp,1)1115        turtle.listen()11161117def btnclick_part3_tutorial4_begcpp(x,y):11181119    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1120        window.clear()1121        window.bgpic('LESSON 4 KLAUDIA-4.png')1122        turtle.onscreenclick(btnclick_part4_tutorial4_begcpp,1)1123        turtle.listen()11241125def btnclick_part4_tutorial4_begcpp(x,y):11261127    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1128        window.clear()1129        window.bgpic('LESSON 5 KLAUDIA-1.png')1130        turtle.onscreenclick(btnclick_part1_tutorial5_begcpp,1)1131        turtle.listen()11321133    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:1134        window.clear()1135        window.bgpic('LESSON 4 KLAUDIA-3.png')1136        turtle.onscreenclick(btnclick_part1_tutorial4_begcpp,1)1137        turtle.listen()11381139    if Button_x_returntolecture <= x <= Button_x_returntolecture+ButtonLength_returntolecture:1140        if Button_y_returntolecture <= y <= Button_y_returntolecture+ButtonWidth_returntolecture:1141            window.clear()1142            window.bgpic('LEC BCG.png')1143            turtle.onscreenclick(btnclickthirdpagebegcpp,1)1144            turtle.listen()11451146    if distance((Button_x_lecture_circle3_center,Button_y_lecture_circle3_center),(x,y)) <= Button_R_lecture_circle3_center**2:1147        window.clear()1148        window.bgpic('LEC BCG.png')1149        turtle.onscreenclick(btnclickthirdpagebegcpp,1)1150        turtle.listen()11511152def btnclick_part1_tutorial5_begcpp(x,y):1153    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1154        window.clear()1155        window.bgpic('LESSON 5 KLAUDIA-2.png')1156        turtle.onscreenclick(btnclick_part2_tutorial5_begcpp,1)1157        turtle.listen()11581159def btnclick_part2_tutorial5_begcpp(x,y):1160    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1161        window.clear()1162        window.bgpic('LESSON 5 KLAUDIA-3.png')1163        turtle.onscreenclick(btnclick_part3_tutorial5_begcpp,1)1164        turtle.listen()11651166    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:1167        window.clear()1168        window.bgpic('LESSON 5 KLAUDIA-1.png')1169        turtle.onscreenclick(btnclick_part1_tutorial5_begcpp,1)1170        turtle.listen()11711172def btnclick_part3_tutorial5_begcpp(x,y):11731174    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1175        window.clear()1176        window.bgpic('LESSON 5 KLAUDIA-4.png')1177        turtle.onscreenclick(btnclick_part4_tutorial5_begcpp,1)1178        turtle.listen()11791180def btnclick_part4_tutorial5_begcpp(x,y):11811182    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:1183        window.clear()1184        window.bgpic('LESSON 5 KLAUDIA-3.png')1185        turtle.onscreenclick(btnclick_part1_tutorial4_begcpp,1)1186        turtle.listen()11871188    if Button_x_playfromlecture <= x <= Button_x_playfromlecture+ButtonLength_playfromlecture:1189        if Button_y_playfromlecture <= y <= Button_y_playfromlecture+ButtonWidth_playfromlecture:1190            window.clear()1191            window.bgpic('GAME_FRONT_PAGE.png')1192            turtle.onscreenclick(btnclickplay,1)1193            turtle.listen()11941195    if distance((Button_x_returnhm_lec_circle1_left,Button_y_returnhm_lec_circle1_left),(x,y)) <= Button_R_returnhm_lec_circle1_left**2:1196        window.clear()1197        window.bgpic('FRONT.png')1198        turtle.onscreenclick(btnclickfirstpage,1)1199        turtle.listen()12001201    if distance((Button_x_returnhm_lec_circle1_right,Button_y_returnhm_lec_circle1_right),(x,y)) <= Button_R_returnhm_lec_circle1_right**2:1202        window.clear()1203        window.bgpic('FRONT.png')1204        turtle.onscreenclick(btnclickfirstpage,1)1205        turtle.listen()12061207    if Button_x_returnhm_lec <= x <= Button_x_returnhm_lec+ButtonLength_returnhm_lec:1208        if Button_y_returnhm_lec <= y <= Button_y_returnhm_lec+ButtonWidth_returnhm_lec:1209            window.clear()1210            window.bgpic('FRONT.png')1211            turtle.onscreenclick(btnclickfirstpage,1)1212            turtle.listen()12131214#Function of the third page advanced CPP - ENSILD's lectures1215def btnclickthirdpageadvCpp(x,y):1216    if Button_x_lec1 <= x <= Button_x_lec1 + ButtonLength_lec1:1217        if Button_y_lec1 <= y <= Button_y_lec1 + ButtonWidth_lec1:12181219            window.clear()1220            window.bgpic('LESSON 1 ENSILD-1.png')1221            turtle.onscreenclick(btnclick_part1_tutorial1_advcpp,1)1222            turtle.listen()12231224    if Button_x_lec2 <= x <= Button_x_lec2 + ButtonLength_lec2:1225        if Button_y_lec2 <= y <= Button_y_lec2 + ButtonWidth_lec2:12261227            window.clear()1228            window.bgpic('LESSON 2 ENSILD-1.png')1229            turtle.onscreenclick(btnclick_part1_tutorial2_advcpp,1)1230            turtle.listen()12311232    if Button_x_lec3 <= x <= Button_x_lec3 + ButtonLength_lec3:1233        if Button_y_lec3 <= y <= Button_y_lec3 + ButtonWidth_lec3:12341235            window.clear()1236            window.bgpic('LESSON 3 ENSILD-1.png')1237            turtle.onscreenclick(btnclick_part1_tutorial3_advcpp,1)1238            turtle.listen()12391240    if Button_x_lec4 <= x <= Button_x_lec4 + ButtonLength_lec4:1241        if Button_y_lec4 <= y <= Button_y_lec4 + ButtonWidth_lec4:12421243            window.clear()1244            window.bgpic('LESSON 4 ENSILD-1.png')1245            turtle.onscreenclick(btnclick_part1_tutorial4_advcpp,1)1246            turtle.listen()12471248    if Button_x_lec5 <= x <= Button_x_lec5 + ButtonLength_lec5:1249        if Button_y_lec5 <= y <= Button_y_lec5 + ButtonWidth_lec5:12501251            window.clear()1252            window.bgpic('LESSON 5 ENSILD-1.png')1253            turtle.onscreenclick(btnclick_part1_tutorial5_advcpp,1)1254            turtle.listen()12551256    if Button_x_returnhm <= x <= Button_x_returnhm + ButtonLength_returnhm:1257        if Button_y_returnhm <= y <= Button_y_returnhm + ButtonWidth_returnhm:12581259            window.clear()1260            window.bgpic('FRONT.png')1261            turtle.onscreenclick(btnclickfirstpage,1)1262            turtle.listen()12631264    if distance((Button_x_returnhmcircle1,Button_y_returnhmcircle1),(x,y)) <= Button_R_returnhmcircle1**2:12651266            window.clear()1267            window.bgpic('FRONT.png')1268            turtle.onscreenclick(btnclickfirstpage,1)1269            turtle.listen()12701271    if distance((Button_x_returnhmcircle2,Button_y_returnhmcircle2),(x,y)) <= Button_R_returnhmcircle2**2:12721273            window.clear()1274            window.bgpic('FRONT.png')1275            turtle.onscreenclick(btnclickfirstpage,1)1276            turtle.listen()12771278#The following functions are Ensildi's lectures and the buttons for each page1279#From lecture 1 till 5 (The last lecture)1280#Inside the functions are included buttons: nextpage, previouspage, turntohomescreen, turntolectures, playagame(This one is located in the last lecture)12811282def btnclick_part1_tutorial1_advcpp(x,y):12831284    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1285        window.clear()1286        window.bgpic('LESSON 1 ENSILD-2.png')1287        turtle.onscreenclick(btnclick_part2_tutorial1_advcpp,1)1288        turtle.listen()12891290def btnclick_part2_tutorial1_advcpp(x,y):12911292    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1293        window.clear()1294        window.bgpic('LESSON 2 ENSILD-1.png')1295        turtle.onscreenclick(btnclick_part1_tutorial2_advcpp,1)1296        turtle.listen()12971298    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:1299        window.clear()1300        window.bgpic('LESSON 1 ENSILD-1.png')1301        turtle.onscreenclick(btnclick_part1_tutorial1_advcpp,1)1302        turtle.listen()13031304    if Button_x_returntolecture <= x <= Button_x_returntolecture+ButtonLength_returntolecture:1305        if Button_y_returntolecture <= y <= Button_y_returntolecture+ButtonWidth_returntolecture:1306            window.clear()1307            window.bgpic('LEC BCG.png')1308            turtle.onscreenclick(btnclickthirdpageadvCpp,1)1309            turtle.listen()13101311    if distance((Button_x_lecture_circle3_center,Button_y_lecture_circle3_center),(x,y)) <= Button_R_lecture_circle3_center**2:1312        window.clear()1313        window.bgpic('LEC BCG.png')1314        turtle.onscreenclick(btnclickthirdpageadvCpp,1)1315        turtle.listen()13161317def btnclick_part1_tutorial2_advcpp(x,y):13181319    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1320        window.clear()1321        window.bgpic('LESSON 2 ENSILD-2.png')1322        turtle.onscreenclick(btnclick_part2_tutorial2_advcpp,1)1323        turtle.listen()13241325def btnclick_part2_tutorial2_advcpp(x,y):13261327    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1328        window.clear()1329        window.bgpic('LESSON 2 ENSILD-3.png')1330        turtle.onscreenclick(btnclick_part3_tutorial2_advcpp,1)1331        turtle.listen()13321333    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:1334        window.clear()1335        window.bgpic('LESSON 2 ENSILD-1.png')1336        turtle.onscreenclick(btnclick_part1_tutorial2_advcpp,1)1337        turtle.listen()13381339def btnclick_part3_tutorial2_advcpp(x,y):13401341    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1342        window.clear()1343        window.bgpic('LESSON 2 ENSILD-4.png')1344        turtle.onscreenclick(btnclick_part4_tutorial2_advcpp,1)1345        turtle.listen()13461347    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:1348        window.clear()1349        window.bgpic('LESSON 2 ENSILD-2.png')1350        turtle.onscreenclick(btnclick_part2_tutorial2_advcpp,1)1351        turtle.listen()13521353def btnclick_part4_tutorial2_advcpp(x,y):13541355    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1356        window.clear()1357        window.bgpic('LESSON 3 ENSILD-1.png')1358        turtle.onscreenclick(btnclick_part1_tutorial3_advcpp,1)1359        turtle.listen()13601361    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:1362        window.clear()1363        window.bgpic('LESSON 2 ENSILD-3.png')1364        turtle.onscreenclick(btnclick_part3_tutorial2_advcpp,1)1365        turtle.listen()13661367    if Button_x_returntolecture <= x <= Button_x_returntolecture+ButtonLength_returntolecture:1368        if Button_y_returntolecture <= y <= Button_y_returntolecture+ButtonWidth_returntolecture:1369            window.clear()1370            window.bgpic('LEC BCG.png')1371            turtle.onscreenclick(btnclickthirdpageadvCpp,1)1372            turtle.listen()13731374    if distance((Button_x_lecture_circle3_center,Button_y_lecture_circle3_center),(x,y)) <= Button_R_lecture_circle3_center**2:1375        window.clear()1376        window.bgpic('LEC BCG.png')1377        turtle.onscreenclick(btnclickthirdpageadvCpp,1)1378        turtle.listen()13791380def btnclick_part1_tutorial3_advcpp(x,y):13811382    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1383        window.clear()1384        window.bgpic('LESSON 3 ENSILD-2.png')1385        turtle.onscreenclick(btnclick_part2_tutorial3_advcpp,1)1386        turtle.listen()13871388def btnclick_part2_tutorial3_advcpp(x,y):13891390    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1391        window.clear()1392        window.bgpic('LESSON 3 ENSILD-3.png')1393        turtle.onscreenclick(btnclick_part3_tutorial3_advcpp,1)1394        turtle.listen()13951396    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:1397        window.clear()1398        window.bgpic('LESSON 3 ENSILD-1.png')1399        turtle.onscreenclick(btnclick_part1_tutorial3_advcpp,1)1400        turtle.listen()14011402def btnclick_part3_tutorial3_advcpp(x,y):14031404    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1405        window.clear()1406        window.bgpic('LESSON 4 ENSILD-1.png')1407        turtle.onscreenclick(btnclick_part1_tutorial4_advcpp,1)1408        turtle.listen()14091410    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:1411        window.clear()1412        window.bgpic('LESSON 3 ENSILD-2.png')1413        turtle.onscreenclick(btnclick_part2_tutorial3_advcpp,1)1414        turtle.listen()14151416    if Button_x_returntolecture <= x <= Button_x_returntolecture+ButtonLength_returntolecture:1417        if Button_y_returntolecture <= y <= Button_y_returntolecture+ButtonWidth_returntolecture:1418            window.clear()1419            window.bgpic('LEC BCG.png')1420            turtle.onscreenclick(btnclickthirdpageadvCpp,1)1421            turtle.listen()14221423    if distance((Button_x_lecture_circle3_center,Button_y_lecture_circle3_center),(x,y)) <= Button_R_lecture_circle3_center**2:1424        window.clear()1425        window.bgpic('LEC BCG.png')1426        turtle.onscreenclick(btnclickthirdpageadvCpp,1)1427        turtle.listen()14281429def btnclick_part1_tutorial4_advcpp(x,y):14301431    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1432        window.clear()1433        window.bgpic('LESSON 4 ENSILD-2.png')1434        turtle.onscreenclick(btnclick_part2_tutorial4_advcpp,1)1435        turtle.listen()14361437def btnclick_part2_tutorial4_advcpp(x,y):14381439    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1440        window.clear()1441        window.bgpic('LESSON 5 ENSILD-1.png')1442        turtle.onscreenclick(btnclick_part1_tutorial5_advcpp,1)1443        turtle.listen()14441445    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:1446        window.clear()1447        window.bgpic('LESSON 4 ENSILD-1.png')1448        turtle.onscreenclick(btnclick_part1_tutorial4_advcpp,1)1449        turtle.listen()14501451    if Button_x_returntolecture <= x <= Button_x_returntolecture+ButtonLength_returntolecture:1452        if Button_y_returntolecture <= y <= Button_y_returntolecture+ButtonWidth_returntolecture:1453            window.clear()1454            window.bgpic('LEC BCG.png')1455            turtle.onscreenclick(btnclickthirdpageadvCpp,1)1456            turtle.listen()14571458    if distance((Button_x_lecture_circle3_center,Button_y_lecture_circle3_center),(x,y)) <= Button_R_lecture_circle3_center**2:1459        window.clear()1460        window.bgpic('LEC BCG.png')1461        turtle.onscreenclick(btnclickthirdpageadvCpp,1)1462        turtle.listen()14631464def btnclick_part1_tutorial5_advcpp(x,y):14651466    if distance((Button_x_lecture_circle1_next,Button_y_lecture_circle1_next),(x,y)) <= Button_R_lecture_circle1_next**2:1467        window.clear()1468        window.bgpic('LESSON 5 ENSILD-2.png')1469        turtle.onscreenclick(btnclick_part2_tutorial5_advcpp,1)1470        turtle.listen()14711472def btnclick_part2_tutorial5_advcpp(x,y):14731474    if distance((Button_x_lecture_circle2_prev,Button_y_lecture_circle2_prev),(x,y)) <= Button_R_lecture_circle2_prev**2:1475        window.clear()1476        window.bgpic('LESSON 5 ENSILD-1.png')1477        turtle.onscreenclick(btnclick_part1_tutorial5_advcpp,1)1478        turtle.listen()14791480    if Button_x_playfromlecture <= x <= Button_x_playfromlecture+ButtonLength_playfromlecture:1481        if Button_y_playfromlecture <= y <= Button_y_playfromlecture+ButtonWidth_playfromlecture:1482            window.clear()1483            window.bgpic('GAME_FRONT_PAGE.png')1484            turtle.onscreenclick(btnclickplay,1)1485            turtle.listen()14861487    if distance((Button_x_returnhm_lec_circle1_left,Button_y_returnhm_lec_circle1_left),(x,y)) <= Button_R_returnhm_lec_circle1_left**2:1488        window.clear()1489        window.bgpic('FRONT.png')1490        turtle.onscreenclick(btnclickfirstpage,1)1491        turtle.listen()14921493    if distance((Button_x_returnhm_lec_circle1_right,Button_y_returnhm_lec_circle1_right),(x,y)) <= Button_R_returnhm_lec_circle1_right**2:1494        window.clear()1495        window.bgpic('FRONT.png')1496        turtle.onscreenclick(btnclickfirstpage,1)1497        turtle.listen()14981499    if Button_x_returnhm_lec <= x <= Button_x_returnhm_lec+ButtonLength_returnhm_lec:1500        if Button_y_returnhm_lec <= y <= Button_y_returnhm_lec+ButtonWidth_returnhm_lec:1501            window.clear()1502            window.bgpic('FRONT.png')1503            turtle.onscreenclick(btnclickfirstpage,1)1504            turtle.listen()1505150615071508150915101511151215131514turtle.onscreenclick(btnclickfirstpage,1)1515turtle.listen()15161517
...__init__.py
Source:__init__.py  
1xiaozhan_reading_review = {2    '4-1': '/toefl/read/practicereview-52-13.html',3    '4-2': '/toefl/read/practicereview-53-13.html',4    '4-3': '/toefl/read/practicereview-54-13.html',5    '3-1': '/toefl/read/practicereview-35-13.html',6    '3-2': '/toefl/read/practicereview-36-13.html',7    '3-3': '/toefl/read/practicereview-37-13.html',8    '2-1': '/toefl/read/practicereview-18-13.html',9    '2-2': '/toefl/read/practicereview-19-13.html',10    '2-3': '/toefl/read/practicereview-20-13.html',11    '1-1': '/toefl/read/practicereview-1-13.html',12    '1-2': '/toefl/read/practicereview-2-13.html',13    '1-3': '/toefl/read/practicereview-3-13.html',14    '8-1': '/toefl/read/practicereview-120-13.html',15    '8-2': '/toefl/read/practicereview-121-13.html',16    '8-3': '/toefl/read/practicereview-122-13.html',17    '7-1': '/toefl/read/practicereview-103-13.html',18    '7-2': '/toefl/read/practicereview-104-13.html',19    '7-3': '/toefl/read/practicereview-105-13.html',20    '6-1': '/toefl/read/practicereview-86-13.html',21    '6-2': '/toefl/read/practicereview-87-13.html',22    '6-3': '/toefl/read/practicereview-88-13.html',23    '5-1': '/toefl/read/practicereview-69-13.html',24    '5-2': '/toefl/read/practicereview-70-13.html',25    '5-3': '/toefl/read/practicereview-71-13.html',26    '12-1': '/toefl/read/practicereview-188-13.html',27    '12-2': '/toefl/read/practicereview-189-13.html',28    '12-3': '/toefl/read/practicereview-190-13.html',29    '11-1': '/toefl/read/practicereview-171-13.html',30    '11-2': '/toefl/read/practicereview-172-13.html',31    '11-3': '/toefl/read/practicereview-173-13.html',32    '10-1': '/toefl/read/practicereview-154-13.html',33    '10-2': '/toefl/read/practicereview-155-13.html',34    '10-3': '/toefl/read/practicereview-156-13.html',35    '9-1': '/toefl/read/practicereview-137-13.html',36    '9-2': '/toefl/read/practicereview-138-13.html',37    '9-3': '/toefl/read/practicereview-139-13.html',38    '16-1': '/toefl/read/practicereview-256-13.html',39    '16-2': '/toefl/read/practicereview-257-13.html',40    '16-3': '/toefl/read/practicereview-258-13.html',41    '15-1': '/toefl/read/practicereview-239-13.html',42    '15-2': '/toefl/read/practicereview-240-13.html',43    '15-3': '/toefl/read/practicereview-241-13.html',44    '14-1': '/toefl/read/practicereview-222-13.html',45    '14-2': '/toefl/read/practicereview-223-13.html',46    '14-3': '/toefl/read/practicereview-224-13.html',47    '13-1': '/toefl/read/practicereview-205-13.html',48    '13-2': '/toefl/read/practicereview-206-13.html',49    '13-3': '/toefl/read/practicereview-207-13.html',50    '20-1': '/toefl/read/practicereview-324-13.html',51    '20-2': '/toefl/read/practicereview-325-13.html',52    '20-3': '/toefl/read/practicereview-326-13.html',53    '19-1': '/toefl/read/practicereview-307-13.html',54    '19-2': '/toefl/read/practicereview-308-13.html',55    '19-3': '/toefl/read/practicereview-309-13.html',56    '18-1': '/toefl/read/practicereview-290-13.html',57    '18-2': '/toefl/read/practicereview-291-13.html',58    '18-3': '/toefl/read/practicereview-292-13.html',59    '17-1': '/toefl/read/practicereview-273-13.html',60    '17-2': '/toefl/read/practicereview-274-13.html',61    '17-3': '/toefl/read/practicereview-275-13.html',62    '24-1': '/toefl/read/practicereview-392-13.html',63    '24-2': '/toefl/read/practicereview-393-13.html',64    '24-3': '/toefl/read/practicereview-394-13.html',65    '23-1': '/toefl/read/practicereview-375-13.html',66    '23-2': '/toefl/read/practicereview-376-13.html',67    '23-3': '/toefl/read/practicereview-377-13.html',68    '22-1': '/toefl/read/practicereview-358-13.html',69    '22-2': '/toefl/read/practicereview-359-13.html',70    '22-3': '/toefl/read/practicereview-360-13.html',71    '21-1': '/toefl/read/practicereview-341-13.html',72    '21-2': '/toefl/read/practicereview-342-13.html',73    '21-3': '/toefl/read/practicereview-343-13.html',74    '28-1': '/toefl/read/practicereview-460-13.html',75    '28-2': '/toefl/read/practicereview-461-13.html',76    '28-3': '/toefl/read/practicereview-462-13.html',77    '27-1': '/toefl/read/practicereview-443-13.html',78    '27-2': '/toefl/read/practicereview-444-13.html',79    '27-3': '/toefl/read/practicereview-445-13.html',80    '26-1': '/toefl/read/practicereview-426-13.html',81    '26-2': '/toefl/read/practicereview-427-13.html',82    '26-3': '/toefl/read/practicereview-428-13.html',83    '25-1': '/toefl/read/practicereview-409-13.html',84    '25-2': '/toefl/read/practicereview-410-13.html',85    '25-3': '/toefl/read/practicereview-411-13.html',86    '32-1': '/toefl/read/practicereview-528-13.html',87    '32-2': '/toefl/read/practicereview-529-13.html',88    '32-3': '/toefl/read/practicereview-530-13.html',89    '31-1': '/toefl/read/practicereview-511-13.html',90    '31-2': '/toefl/read/practicereview-512-13.html',91    '31-3': '/toefl/read/practicereview-513-13.html',92    '30-1': '/toefl/read/practicereview-494-13.html',93    '30-2': '/toefl/read/practicereview-495-13.html',94    '30-3': '/toefl/read/practicereview-496-13.html',95    '29-1': '/toefl/read/practicereview-477-13.html',96    '29-2': '/toefl/read/practicereview-478-13.html',97    '29-3': '/toefl/read/practicereview-479-13.html',98    '36-1': '/toefl/read/practicereview-951-13.html',99    '36-2': '/toefl/read/practicereview-952-13.html',100    '36-3': '/toefl/read/practicereview-953-13.html',101    '35-1': '/toefl/read/practicereview-917-13.html',102    '35-2': '/toefl/read/practicereview-918-13.html',103    '35-3': '/toefl/read/practicereview-919-13.html',104    '34-1': '/toefl/read/practicereview-562-13.html',105    '34-2': '/toefl/read/practicereview-563-13.html',106    '34-3': '/toefl/read/practicereview-564-13.html',107    '33-1': '/toefl/read/practicereview-545-13.html',108    '33-2': '/toefl/read/practicereview-546-13.html',109    '33-3': '/toefl/read/practicereview-547-13.html',110    '40-1': '/toefl/read/practicereview-611-13.html',111    '40-2': '/toefl/read/practicereview-612-13.html',112    '40-3': '/toefl/read/practicereview-613-13.html',113    '39-1': '/toefl/read/practicereview-934-13.html',114    '39-2': '/toefl/read/practicereview-935-13.html',115    '39-3': '/toefl/read/practicereview-936-13.html',116    '38-1': '/toefl/read/practicereview-968-13.html',117    '38-2': '/toefl/read/practicereview-969-13.html',118    '38-3': '/toefl/read/practicereview-970-13.html',119    '37-1': '/toefl/read/practicereview-985-13.html',120    '37-2': '/toefl/read/practicereview-986-13.html',121    '37-3': '/toefl/read/practicereview-987-13.html',122    '44-1': '/toefl/read/practicereview-679-13.html',123    '44-2': '/toefl/read/practicereview-680-13.html',124    '44-3': '/toefl/read/practicereview-681-13.html',125    '43-1': '/toefl/read/practicereview-662-13.html',126    '43-2': '/toefl/read/practicereview-663-13.html',127    '43-3': '/toefl/read/practicereview-664-13.html',128    '42-1': '/toefl/read/practicereview-645-13.html',129    '42-2': '/toefl/read/practicereview-646-13.html',130    '42-3': '/toefl/read/practicereview-647-13.html',131    '41-1': '/toefl/read/practicereview-628-13.html',132    '41-2': '/toefl/read/practicereview-629-13.html',133    '41-3': '/toefl/read/practicereview-630-13.html',134    '48-1': '/toefl/read/practicereview-747-13.html',135    '48-2': '/toefl/read/practicereview-748-13.html',136    '48-3': '/toefl/read/practicereview-749-13.html',137    '47-1': '/toefl/read/practicereview-730-13.html',138    '47-2': '/toefl/read/practicereview-731-13.html',139    '47-3': '/toefl/read/practicereview-732-13.html',140    '46-1': '/toefl/read/practicereview-713-13.html',141    '46-2': '/toefl/read/practicereview-714-13.html',142    '46-3': '/toefl/read/practicereview-715-13.html',143    '45-1': '/toefl/read/practicereview-696-13.html',144    '45-2': '/toefl/read/practicereview-697-13.html',145    '45-3': '/toefl/read/practicereview-698-13.html',146    '53-1': '/toefl/read/practicereview-1334-13.html',147    '53-2': '/toefl/read/practicereview-1335-13.html',148    '53-3': '/toefl/read/practicereview-1336-13.html',149    '52-1': '/toefl/read/practicereview-1312-13.html',150    '52-2': '/toefl/read/practicereview-1313-13.html',151    '52-3': '/toefl/read/practicereview-1314-13.html',152    '51-1': '/toefl/read/practicereview-1295-13.html',153    '51-2': '/toefl/read/practicereview-1296-13.html',154    '51-3': '/toefl/read/practicereview-1297-13.html',155    '50-1': '/toefl/read/practicereview-1278-13.html',156    '50-2': '/toefl/read/practicereview-1279-13.html',157    '50-3': '/toefl/read/practicereview-1280-13.html',158    '49-1': '/toefl/read/practicereview-900-13.html',159    '49-2': '/toefl/read/practicereview-901-13.html',160    '49-3': '/toefl/read/practicereview-902-13.html'161}162xiaozhan_reading_cihui = {163    # '4-1': '/cihui/toefl/reading-52.html',164    # '4-2': '/cihui/toefl/reading-53.html',165    # '4-3': '/cihui/toefl/reading-54.html',166    # '3-1': '/cihui/toefl/reading-35.html',167    # '3-2': '/cihui/toefl/reading-36.html',168    # '3-3': '/cihui/toefl/reading-37.html',169    # '2-1': '/cihui/toefl/reading-18.html',170    # '2-2': '/cihui/toefl/reading-19.html',171    # '2-3': '/cihui/toefl/reading-20.html',172    # '1-1': '/cihui/toefl/reading-1.html',173    # '1-2': '/cihui/toefl/reading-2.html',174    # '1-3': '/cihui/toefl/reading-3.html',175    # '8-1': '/cihui/toefl/reading-120.html',176    # '8-2': '/cihui/toefl/reading-121.html',177    # '8-3': '/cihui/toefl/reading-122.html',178    # '7-1': '/cihui/toefl/reading-103.html',179    # '7-2': '/cihui/toefl/reading-104.html',180    # '7-3': '/cihui/toefl/reading-105.html',181    # '6-1': '/cihui/toefl/reading-86.html',182    # '6-2': '/cihui/toefl/reading-87.html',183    # '6-3': '/cihui/toefl/reading-88.html',184    # '5-1': '/cihui/toefl/reading-69.html',185    # '5-2': '/cihui/toefl/reading-70.html',186    # '5-3': '/cihui/toefl/reading-71.html',187    # '12-1': '/cihui/toefl/reading-188.html',188    '12-2': '/cihui/toefl/reading-189.html',189    '12-3': '/cihui/toefl/reading-190.html',190    '11-1': '/cihui/toefl/reading-171.html',191    '11-2': '/cihui/toefl/reading-172.html',192    '11-3': '/cihui/toefl/reading-173.html',193    '10-1': '/cihui/toefl/reading-154.html',194    '10-2': '/cihui/toefl/reading-155.html',195    '10-3': '/cihui/toefl/reading-156.html',196    '9-1': '/cihui/toefl/reading-137.html',197    '9-2': '/cihui/toefl/reading-138.html',198    '9-3': '/cihui/toefl/reading-139.html',199    '16-1': '/cihui/toefl/reading-256.html',200    '16-2': '/cihui/toefl/reading-257.html',201    '16-3': '/cihui/toefl/reading-258.html',202    '15-1': '/cihui/toefl/reading-239.html',203    '15-2': '/cihui/toefl/reading-240.html',204    '15-3': '/cihui/toefl/reading-241.html',205    '14-1': '/cihui/toefl/reading-222.html',206    '14-2': '/cihui/toefl/reading-223.html',207    '14-3': '/cihui/toefl/reading-224.html',208    '13-1': '/cihui/toefl/reading-205.html',209    '13-2': '/cihui/toefl/reading-206.html',210    '13-3': '/cihui/toefl/reading-207.html',211    '20-1': '/cihui/toefl/reading-324.html',212    '20-2': '/cihui/toefl/reading-325.html',213    '20-3': '/cihui/toefl/reading-326.html',214    '19-1': '/cihui/toefl/reading-307.html',215    '19-2': '/cihui/toefl/reading-308.html',216    '19-3': '/cihui/toefl/reading-309.html',217    '18-1': '/cihui/toefl/reading-290.html',218    '18-2': '/cihui/toefl/reading-291.html',219    '18-3': '/cihui/toefl/reading-292.html',220    '17-1': '/cihui/toefl/reading-273.html',221    '17-2': '/cihui/toefl/reading-274.html',222    '17-3': '/cihui/toefl/reading-275.html',223    '24-1': '/cihui/toefl/reading-392.html',224    '24-2': '/cihui/toefl/reading-393.html',225    '24-3': '/cihui/toefl/reading-394.html',226    '23-1': '/cihui/toefl/reading-375.html',227    '23-2': '/cihui/toefl/reading-376.html',228    '23-3': '/cihui/toefl/reading-377.html',229    '22-1': '/cihui/toefl/reading-358.html',230    '22-2': '/cihui/toefl/reading-359.html',231    '22-3': '/cihui/toefl/reading-360.html',232    '21-1': '/cihui/toefl/reading-341.html',233    '21-2': '/cihui/toefl/reading-342.html',234    '21-3': '/cihui/toefl/reading-343.html',235    '28-1': '/cihui/toefl/reading-460.html',236    '28-2': '/cihui/toefl/reading-461.html',237    '28-3': '/cihui/toefl/reading-462.html',238    '27-1': '/cihui/toefl/reading-443.html',239    '27-2': '/cihui/toefl/reading-444.html',240    '27-3': '/cihui/toefl/reading-445.html',241    '26-1': '/cihui/toefl/reading-426.html',242    '26-2': '/cihui/toefl/reading-427.html',243    '26-3': '/cihui/toefl/reading-428.html',244    '25-1': '/cihui/toefl/reading-409.html',245    '25-2': '/cihui/toefl/reading-410.html',246    '25-3': '/cihui/toefl/reading-411.html',247    '32-1': '/cihui/toefl/reading-528.html',248    '32-2': '/cihui/toefl/reading-529.html',249    '32-3': '/cihui/toefl/reading-530.html',250    '31-1': '/cihui/toefl/reading-511.html',251    '31-2': '/cihui/toefl/reading-512.html',252    '31-3': '/cihui/toefl/reading-513.html',253    '30-1': '/cihui/toefl/reading-494.html',254    '30-2': '/cihui/toefl/reading-495.html',255    '30-3': '/cihui/toefl/reading-496.html',256    '29-1': '/cihui/toefl/reading-477.html',257    '29-2': '/cihui/toefl/reading-478.html',258    '29-3': '/cihui/toefl/reading-479.html',259    '36-1': '/cihui/toefl/reading-951.html',260    '36-2': '/cihui/toefl/reading-952.html',261    '36-3': '/cihui/toefl/reading-953.html',262    '35-1': '/cihui/toefl/reading-917.html',263    '35-2': '/cihui/toefl/reading-918.html',264    '35-3': '/cihui/toefl/reading-919.html',265    '34-1': '/cihui/toefl/reading-562.html',266    '34-2': '/cihui/toefl/reading-563.html',267    '34-3': '/cihui/toefl/reading-564.html',268    '33-1': '/cihui/toefl/reading-545.html',269    '33-2': '/cihui/toefl/reading-546.html',270    '33-3': '/cihui/toefl/reading-547.html',271    '40-1': '/cihui/toefl/reading-611.html',272    '40-2': '/cihui/toefl/reading-612.html',273    '40-3': '/cihui/toefl/reading-613.html',274    '39-1': '/cihui/toefl/reading-934.html',275    '39-2': '/cihui/toefl/reading-935.html',276    '39-3': '/cihui/toefl/reading-936.html',277    '38-1': '/cihui/toefl/reading-968.html',278    '38-2': '/cihui/toefl/reading-969.html',279    '38-3': '/cihui/toefl/reading-970.html',280    '37-1': '/cihui/toefl/reading-985.html',281    '37-2': '/cihui/toefl/reading-986.html',282    '37-3': '/cihui/toefl/reading-987.html',283    '44-1': '/cihui/toefl/reading-679.html',284    '44-2': '/cihui/toefl/reading-680.html',285    '44-3': '/cihui/toefl/reading-681.html',286    '43-1': '/cihui/toefl/reading-662.html',287    '43-2': '/cihui/toefl/reading-663.html',288    '43-3': '/cihui/toefl/reading-664.html',289    '42-1': '/cihui/toefl/reading-645.html',290    '42-2': '/cihui/toefl/reading-646.html',291    '42-3': '/cihui/toefl/reading-647.html',292    '41-1': '/cihui/toefl/reading-628.html',293    '41-2': '/cihui/toefl/reading-629.html',294    '41-3': '/cihui/toefl/reading-630.html',295    '48-1': '/cihui/toefl/reading-747.html',296    '48-2': '/cihui/toefl/reading-748.html',297    '48-3': '/cihui/toefl/reading-749.html',298    '47-1': '/cihui/toefl/reading-730.html',299    '47-2': '/cihui/toefl/reading-731.html',300    '47-3': '/cihui/toefl/reading-732.html',301    '46-1': '/cihui/toefl/reading-713.html',302    '46-2': '/cihui/toefl/reading-714.html',303    '46-3': '/cihui/toefl/reading-715.html',304    '45-1': '/cihui/toefl/reading-696.html',305    '45-2': '/cihui/toefl/reading-697.html',306    '45-3': '/cihui/toefl/reading-698.html',307    '53-1': '/cihui/toefl/reading-1334.html',308    '53-2': '/cihui/toefl/reading-1335.html',309    '53-3': '/cihui/toefl/reading-1336.html',310    '52-1': '/cihui/toefl/reading-1312.html',311    '52-2': '/cihui/toefl/reading-1313.html',312    '52-3': '/cihui/toefl/reading-1314.html',313    '51-1': '/cihui/toefl/reading-1295.html',314    '51-2': '/cihui/toefl/reading-1296.html',315    '51-3': '/cihui/toefl/reading-1297.html',316    '50-1': '/cihui/toefl/reading-1278.html',317    '50-2': '/cihui/toefl/reading-1279.html',318    '50-3': '/cihui/toefl/reading-1280.html',319    '49-1': '/cihui/toefl/reading-900.html',320    '49-2': '/cihui/toefl/reading-901.html',321    '49-3': '/cihui/toefl/reading-902.html'322}323xiaozhan_listen_review = {324    '4-1': '/toefl/listen/review-55-13.html',325    '4-2': '/toefl/listen/review-56-13.html',326    '4-3': '/toefl/listen/review-57-13.html',327    '4-4': '/toefl/listen/review-58-13.html',328    '4-5': '/toefl/listen/review-59-13.html',329    '4-6': '/toefl/listen/review-60-13.html',330    '3-1': '/toefl/listen/review-38-13.html',331    '3-2': '/toefl/listen/review-39-13.html',332    '3-3': '/toefl/listen/review-40-13.html',333    '3-4': '/toefl/listen/review-41-13.html',334    '3-5': '/toefl/listen/review-42-13.html',335    '3-6': '/toefl/listen/review-43-13.html',336    '2-1': '/toefl/listen/review-21-13.html',337    '2-2': '/toefl/listen/review-22-13.html',338    '2-3': '/toefl/listen/review-23-13.html',339    '2-4': '/toefl/listen/review-24-13.html',340    '2-5': '/toefl/listen/review-25-13.html',341    '2-6': '/toefl/listen/review-26-13.html',342    '1-1': '/toefl/listen/review-4-13.html',343    '1-2': '/toefl/listen/review-5-13.html',344    '1-3': '/toefl/listen/review-6-13.html',345    '1-4': '/toefl/listen/review-7-13.html',346    '1-5': '/toefl/listen/review-8-13.html',347    '1-6': '/toefl/listen/review-9-13.html',348    '8-1': '/toefl/listen/review-123-13.html',349    '8-2': '/toefl/listen/review-124-13.html',350    '8-3': '/toefl/listen/review-125-13.html',351    '8-4': '/toefl/listen/review-126-13.html',352    '8-5': '/toefl/listen/review-127-13.html',353    '8-6': '/toefl/listen/review-128-13.html',354    '7-1': '/toefl/listen/review-106-13.html',355    '7-2': '/toefl/listen/review-107-13.html',356    '7-3': '/toefl/listen/review-108-13.html',357    '7-4': '/toefl/listen/review-109-13.html',358    '7-5': '/toefl/listen/review-110-13.html',359    '7-6': '/toefl/listen/review-111-13.html',360    '6-1': '/toefl/listen/review-89-13.html',361    '6-2': '/toefl/listen/review-90-13.html',362    '6-3': '/toefl/listen/review-91-13.html',363    '6-4': '/toefl/listen/review-92-13.html',364    '6-5': '/toefl/listen/review-93-13.html',365    '6-6': '/toefl/listen/review-94-13.html',366    '5-1': '/toefl/listen/review-72-13.html',367    '5-2': '/toefl/listen/review-73-13.html',368    '5-3': '/toefl/listen/review-74-13.html',369    '5-4': '/toefl/listen/review-75-13.html',370    '5-5': '/toefl/listen/review-76-13.html',371    '5-6': '/toefl/listen/review-77-13.html',372    '12-1': '/toefl/listen/review-191-13.html',373    '12-2': '/toefl/listen/review-192-13.html',374    '12-3': '/toefl/listen/review-193-13.html',375    '12-4': '/toefl/listen/review-194-13.html',376    '12-5': '/toefl/listen/review-195-13.html',377    '12-6': '/toefl/listen/review-196-13.html',378    '11-1': '/toefl/listen/review-174-13.html',379    '11-2': '/toefl/listen/review-175-13.html',380    '11-3': '/toefl/listen/review-176-13.html',381    '11-4': '/toefl/listen/review-177-13.html',382    '11-5': '/toefl/listen/review-178-13.html',383    '11-6': '/toefl/listen/review-179-13.html',384    '10-1': '/toefl/listen/review-157-13.html',385    '10-2': '/toefl/listen/review-158-13.html',386    '10-3': '/toefl/listen/review-159-13.html',387    '10-4': '/toefl/listen/review-160-13.html',388    '10-5': '/toefl/listen/review-161-13.html',389    '10-6': '/toefl/listen/review-162-13.html',390    '9-1': '/toefl/listen/review-140-13.html',391    '9-2': '/toefl/listen/review-141-13.html',392    '9-3': '/toefl/listen/review-142-13.html',393    '9-4': '/toefl/listen/review-143-13.html',394    '9-5': '/toefl/listen/review-144-13.html',395    '9-6': '/toefl/listen/review-145-13.html',396    '16-1': '/toefl/listen/review-259-13.html',397    '16-2': '/toefl/listen/review-260-13.html',398    '16-3': '/toefl/listen/review-261-13.html',399    '16-4': '/toefl/listen/review-262-13.html',400    '16-5': '/toefl/listen/review-263-13.html',401    '16-6': '/toefl/listen/review-264-13.html',402    '15-1': '/toefl/listen/review-242-13.html',403    '15-2': '/toefl/listen/review-243-13.html',404    '15-3': '/toefl/listen/review-244-13.html',405    '15-4': '/toefl/listen/review-245-13.html',406    '15-5': '/toefl/listen/review-246-13.html',407    '15-6': '/toefl/listen/review-247-13.html',408    '14-1': '/toefl/listen/review-225-13.html',409    '14-2': '/toefl/listen/review-226-13.html',410    '14-3': '/toefl/listen/review-227-13.html',411    '14-4': '/toefl/listen/review-228-13.html',412    '14-5': '/toefl/listen/review-229-13.html',413    '14-6': '/toefl/listen/review-230-13.html',414    '13-1': '/toefl/listen/review-208-13.html',415    '13-2': '/toefl/listen/review-209-13.html',416    '13-3': '/toefl/listen/review-210-13.html',417    '13-4': '/toefl/listen/review-211-13.html',418    '13-5': '/toefl/listen/review-212-13.html',419    '13-6': '/toefl/listen/review-213-13.html',420    '20-1': '/toefl/listen/review-327-13.html',421    '20-2': '/toefl/listen/review-328-13.html',422    '20-3': '/toefl/listen/review-329-13.html',423    '20-4': '/toefl/listen/review-330-13.html',424    '20-5': '/toefl/listen/review-331-13.html',425    '20-6': '/toefl/listen/review-332-13.html',426    '19-1': '/toefl/listen/review-310-13.html',427    '19-2': '/toefl/listen/review-311-13.html',428    '19-3': '/toefl/listen/review-312-13.html',429    '19-4': '/toefl/listen/review-313-13.html',430    '19-5': '/toefl/listen/review-314-13.html',431    '19-6': '/toefl/listen/review-315-13.html',432    '18-1': '/toefl/listen/review-293-13.html',433    '18-2': '/toefl/listen/review-294-13.html',434    '18-3': '/toefl/listen/review-295-13.html',435    '18-4': '/toefl/listen/review-296-13.html',436    '18-5': '/toefl/listen/review-297-13.html',437    '18-6': '/toefl/listen/review-298-13.html',438    '17-1': '/toefl/listen/review-276-13.html',439    '17-2': '/toefl/listen/review-277-13.html',440    '17-3': '/toefl/listen/review-278-13.html',441    '17-4': '/toefl/listen/review-279-13.html',442    '17-5': '/toefl/listen/review-280-13.html',443    '17-6': '/toefl/listen/review-281-13.html',444    '24-1': '/toefl/listen/review-395-13.html',445    '24-2': '/toefl/listen/review-396-13.html',446    '24-3': '/toefl/listen/review-397-13.html',447    '24-4': '/toefl/listen/review-398-13.html',448    '24-5': '/toefl/listen/review-399-13.html',449    '24-6': '/toefl/listen/review-400-13.html',450    '23-1': '/toefl/listen/review-378-13.html',451    '23-2': '/toefl/listen/review-379-13.html',452    '23-3': '/toefl/listen/review-380-13.html',453    '23-4': '/toefl/listen/review-381-13.html',454    '23-5': '/toefl/listen/review-382-13.html',455    '23-6': '/toefl/listen/review-383-13.html',456    '22-1': '/toefl/listen/review-361-13.html',457    '22-2': '/toefl/listen/review-362-13.html',458    '22-3': '/toefl/listen/review-363-13.html',459    '22-4': '/toefl/listen/review-364-13.html',460    '22-5': '/toefl/listen/review-365-13.html',461    '22-6': '/toefl/listen/review-366-13.html',462    '21-1': '/toefl/listen/review-344-13.html',463    '21-2': '/toefl/listen/review-345-13.html',464    '21-3': '/toefl/listen/review-346-13.html',465    '21-4': '/toefl/listen/review-347-13.html',466    '21-5': '/toefl/listen/review-348-13.html',467    '21-6': '/toefl/listen/review-349-13.html',468    '28-1': '/toefl/listen/review-463-13.html',469    '28-2': '/toefl/listen/review-464-13.html',470    '28-3': '/toefl/listen/review-465-13.html',471    '28-4': '/toefl/listen/review-466-13.html',472    '28-5': '/toefl/listen/review-467-13.html',473    '28-6': '/toefl/listen/review-468-13.html',474    '27-1': '/toefl/listen/review-446-13.html',475    '27-2': '/toefl/listen/review-447-13.html',476    '27-3': '/toefl/listen/review-448-13.html',477    '27-4': '/toefl/listen/review-449-13.html',478    '27-5': '/toefl/listen/review-450-13.html',479    '27-6': '/toefl/listen/review-451-13.html',480    '26-1': '/toefl/listen/review-429-13.html',481    '26-2': '/toefl/listen/review-430-13.html',482    '26-3': '/toefl/listen/review-431-13.html',483    '26-4': '/toefl/listen/review-432-13.html',484    '26-5': '/toefl/listen/review-433-13.html',485    '26-6': '/toefl/listen/review-434-13.html',486    '25-1': '/toefl/listen/review-412-13.html',487    '25-2': '/toefl/listen/review-413-13.html',488    '25-3': '/toefl/listen/review-414-13.html',489    '25-4': '/toefl/listen/review-415-13.html',490    '25-5': '/toefl/listen/review-416-13.html',491    '25-6': '/toefl/listen/review-417-13.html',492    '32-1': '/toefl/listen/review-531-13.html',493    '32-2': '/toefl/listen/review-532-13.html',494    '32-3': '/toefl/listen/review-533-13.html',495    '32-4': '/toefl/listen/review-534-13.html',496    '32-5': '/toefl/listen/review-535-13.html',497    '32-6': '/toefl/listen/review-536-13.html',498    '31-1': '/toefl/listen/review-514-13.html',499    '31-2': '/toefl/listen/review-515-13.html',500    '31-3': '/toefl/listen/review-516-13.html',501    '31-4': '/toefl/listen/review-517-13.html',502    '31-5': '/toefl/listen/review-518-13.html',503    '31-6': '/toefl/listen/review-519-13.html',504    '30-1': '/toefl/listen/review-497-13.html',505    '30-2': '/toefl/listen/review-498-13.html',506    '30-3': '/toefl/listen/review-499-13.html',507    '30-4': '/toefl/listen/review-500-13.html',508    '30-5': '/toefl/listen/review-501-13.html',509    '30-6': '/toefl/listen/review-502-13.html',510    '29-1': '/toefl/listen/review-480-13.html',511    '29-2': '/toefl/listen/review-481-13.html',512    '29-3': '/toefl/listen/review-482-13.html',513    '29-4': '/toefl/listen/review-483-13.html',514    '29-5': '/toefl/listen/review-484-13.html',515    '29-6': '/toefl/listen/review-485-13.html',516    '36-1': '/toefl/listen/review-954-13.html',517    '36-2': '/toefl/listen/review-955-13.html',518    '36-3': '/toefl/listen/review-956-13.html',519    '36-4': '/toefl/listen/review-957-13.html',520    '36-5': '/toefl/listen/review-958-13.html',521    '36-6': '/toefl/listen/review-959-13.html',522    '35-1': '/toefl/listen/review-920-13.html',523    '35-2': '/toefl/listen/review-921-13.html',524    '35-3': '/toefl/listen/review-922-13.html',525    '35-4': '/toefl/listen/review-923-13.html',526    '35-5': '/toefl/listen/review-924-13.html',527    '35-6': '/toefl/listen/review-925-13.html',528    '34-1': '/toefl/listen/review-565-13.html',529    '34-2': '/toefl/listen/review-566-13.html',530    '34-3': '/toefl/listen/review-567-13.html',531    '34-4': '/toefl/listen/review-568-13.html',532    '34-5': '/toefl/listen/review-569-13.html',533    '34-6': '/toefl/listen/review-570-13.html',534    '33-1': '/toefl/listen/review-548-13.html',535    '33-2': '/toefl/listen/review-549-13.html',536    '33-3': '/toefl/listen/review-550-13.html',537    '33-4': '/toefl/listen/review-551-13.html',538    '33-5': '/toefl/listen/review-552-13.html',539    '33-6': '/toefl/listen/review-553-13.html',540    '40-1': '/toefl/listen/review-614-13.html',541    '40-2': '/toefl/listen/review-615-13.html',542    '40-3': '/toefl/listen/review-616-13.html',543    '40-4': '/toefl/listen/review-617-13.html',544    '40-5': '/toefl/listen/review-618-13.html',545    '40-6': '/toefl/listen/review-619-13.html',546    '39-1': '/toefl/listen/review-937-13.html',547    '39-2': '/toefl/listen/review-938-13.html',548    '39-3': '/toefl/listen/review-939-13.html',549    '39-4': '/toefl/listen/review-940-13.html',550    '39-5': '/toefl/listen/review-941-13.html',551    '39-6': '/toefl/listen/review-942-13.html',552    '38-1': '/toefl/listen/review-971-13.html',553    '38-2': '/toefl/listen/review-972-13.html',554    '38-3': '/toefl/listen/review-973-13.html',555    '38-4': '/toefl/listen/review-974-13.html',556    '38-5': '/toefl/listen/review-975-13.html',557    '38-6': '/toefl/listen/review-976-13.html',558    '37-1': '/toefl/listen/review-988-13.html',559    '37-2': '/toefl/listen/review-989-13.html',560    '37-3': '/toefl/listen/review-990-13.html',561    '37-4': '/toefl/listen/review-991-13.html',562    '37-5': '/toefl/listen/review-992-13.html',563    '37-6': '/toefl/listen/review-993-13.html',564    '44-1': '/toefl/listen/review-682-13.html',565    '44-2': '/toefl/listen/review-683-13.html',566    '44-3': '/toefl/listen/review-684-13.html',567    '44-4': '/toefl/listen/review-685-13.html',568    '44-5': '/toefl/listen/review-686-13.html',569    '44-6': '/toefl/listen/review-687-13.html',570    '43-1': '/toefl/listen/review-665-13.html',571    '43-2': '/toefl/listen/review-666-13.html',572    '43-3': '/toefl/listen/review-667-13.html',573    '43-4': '/toefl/listen/review-668-13.html',574    '43-5': '/toefl/listen/review-669-13.html',575    '43-6': '/toefl/listen/review-670-13.html',576    '42-1': '/toefl/listen/review-648-13.html',577    '42-2': '/toefl/listen/review-649-13.html',578    '42-3': '/toefl/listen/review-650-13.html',579    '42-4': '/toefl/listen/review-651-13.html',580    '42-5': '/toefl/listen/review-652-13.html',581    '42-6': '/toefl/listen/review-653-13.html',582    '41-1': '/toefl/listen/review-631-13.html',583    '41-2': '/toefl/listen/review-632-13.html',584    '41-3': '/toefl/listen/review-633-13.html',585    '41-4': '/toefl/listen/review-634-13.html',586    '41-5': '/toefl/listen/review-635-13.html',587    '41-6': '/toefl/listen/review-636-13.html',588    '48-1': '/toefl/listen/review-750-13.html',589    '48-2': '/toefl/listen/review-751-13.html',590    '48-3': '/toefl/listen/review-752-13.html',591    '48-4': '/toefl/listen/review-753-13.html',592    '48-5': '/toefl/listen/review-754-13.html',593    '48-6': '/toefl/listen/review-755-13.html',594    '47-1': '/toefl/listen/review-733-13.html',595    '47-2': '/toefl/listen/review-734-13.html',596    '47-3': '/toefl/listen/review-735-13.html',597    '47-4': '/toefl/listen/review-736-13.html',598    '47-5': '/toefl/listen/review-737-13.html',599    '47-6': '/toefl/listen/review-738-13.html',600    '46-1': '/toefl/listen/review-716-13.html',601    '46-2': '/toefl/listen/review-717-13.html',602    '46-3': '/toefl/listen/review-718-13.html',603    '46-4': '/toefl/listen/review-719-13.html',604    '46-5': '/toefl/listen/review-720-13.html',605    '46-6': '/toefl/listen/review-721-13.html',606    '45-1': '/toefl/listen/review-699-13.html',607    '45-2': '/toefl/listen/review-700-13.html',608    '45-3': '/toefl/listen/review-701-13.html',609    '45-4': '/toefl/listen/review-702-13.html',610    '45-5': '/toefl/listen/review-703-13.html',611    '45-6': '/toefl/listen/review-704-13.html',612    '53-1': '/toefl/listen/review-1347-13.html',613    '53-2': '/toefl/listen/review-1348-13.html',614    '53-3': '/toefl/listen/review-1350-13.html',615    '53-4': '/toefl/listen/review-1351-13.html',616    '53-5': '/toefl/listen/review-1352-13.html',617    '53-6': '/toefl/listen/review-1353-13.html',618    '52-1': '/toefl/listen/review-1315-13.html',619    '52-2': '/toefl/listen/review-1316-13.html',620    '52-3': '/toefl/listen/review-1317-13.html',621    '52-4': '/toefl/listen/review-1318-13.html',622    '52-5': '/toefl/listen/review-1319-13.html',623    '52-6': '/toefl/listen/review-1320-13.html',624    '51-1': '/toefl/listen/review-1298-13.html',625    '51-2': '/toefl/listen/review-1299-13.html',626    '51-3': '/toefl/listen/review-1300-13.html',627    '51-4': '/toefl/listen/review-1301-13.html',628    '51-5': '/toefl/listen/review-1302-13.html',629    '51-6': '/toefl/listen/review-1303-13.html',630    '50-1': '/toefl/listen/review-1281-13.html',631    '50-2': '/toefl/listen/review-1282-13.html',632    '50-3': '/toefl/listen/review-1283-13.html',633    '50-4': '/toefl/listen/review-1284-13.html',634    '50-5': '/toefl/listen/review-1285-13.html',635    '50-6': '/toefl/listen/review-1286-13.html',636    '49-1': '/toefl/listen/review-903-13.html',637    '49-2': '/toefl/listen/review-904-13.html',638    '49-3': '/toefl/listen/review-905-13.html',639    '49-4': '/toefl/listen/review-906-13.html',640    '49-5': '/toefl/listen/review-907-13.html',641    '49-6': '/toefl/listen/review-908-13.html'642}643if __name__ == '__main__':...test_init.py
Source:test_init.py  
1"""Test qwikswitch sensors."""2import asyncio3from unittest.mock import Mock4from aiohttp.client_exceptions import ClientError5import pytest6from yarl import URL7from homeassistant.components.qwikswitch import DOMAIN as QWIKSWITCH8from homeassistant.setup import async_setup_component9from tests.test_util.aiohttp import AiohttpClientMockResponse, MockLongPollSideEffect10@pytest.fixture11def qs_devices():12    """Return a set of devices as a response."""13    return [14        {15            "id": "@a00001",16            "name": "Switch 1",17            "type": "rel",18            "val": "OFF",19            "time": "1522777506",20            "rssi": "51%",21        },22        {23            "id": "@a00002",24            "name": "Light 2",25            "type": "rel",26            "val": "ON",27            "time": "1522777507",28            "rssi": "45%",29        },30        {31            "id": "@a00003",32            "name": "Dim 3",33            "type": "dim",34            "val": "280c00",35            "time": "1522777544",36            "rssi": "62%",37        },38    ]39EMPTY_PACKET = {"cmd": ""}40async def test_binary_sensor_device(hass, aioclient_mock, qs_devices):41    """Test a binary sensor device."""42    config = {43        "qwikswitch": {44            "sensors": {"name": "s1", "id": "@a00001", "channel": 1, "type": "imod"}45        }46    }47    aioclient_mock.get("http://127.0.0.1:2020/&device", json=qs_devices)48    listen_mock = MockLongPollSideEffect()49    aioclient_mock.get("http://127.0.0.1:2020/&listen", side_effect=listen_mock)50    assert await async_setup_component(hass, QWIKSWITCH, config)51    await hass.async_start()52    await hass.async_block_till_done()53    # verify initial state is off per the 'val' in qs_devices54    state_obj = hass.states.get("binary_sensor.s1")55    assert state_obj.state == "off"56    # receive turn on command from network57    listen_mock.queue_response(58        json={"id": "@a00001", "cmd": "STATUS.ACK", "data": "4e0e1601", "rssi": "61%"}59    )60    await asyncio.sleep(0.01)61    await hass.async_block_till_done()62    state_obj = hass.states.get("binary_sensor.s1")63    assert state_obj.state == "on"64    # receive turn off command from network65    listen_mock.queue_response(66        json={"id": "@a00001", "cmd": "STATUS.ACK", "data": "4e0e1701", "rssi": "61%"},67    )68    await asyncio.sleep(0.01)69    await hass.async_block_till_done()70    state_obj = hass.states.get("binary_sensor.s1")71    assert state_obj.state == "off"72    listen_mock.stop()73async def test_sensor_device(hass, aioclient_mock, qs_devices):74    """Test a sensor device."""75    config = {76        "qwikswitch": {77            "sensors": {78                "name": "ss1",79                "id": "@a00001",80                "channel": 1,81                "type": "qwikcord",82            }83        }84    }85    aioclient_mock.get("http://127.0.0.1:2020/&device", json=qs_devices)86    listen_mock = MockLongPollSideEffect()87    aioclient_mock.get("http://127.0.0.1:2020/&listen", side_effect=listen_mock)88    assert await async_setup_component(hass, QWIKSWITCH, config)89    await hass.async_start()90    await hass.async_block_till_done()91    state_obj = hass.states.get("sensor.ss1")92    assert state_obj.state == "None"93    # receive command that sets the sensor value94    listen_mock.queue_response(95        json={"id": "@a00001", "name": "ss1", "type": "rel", "val": "4733800001a00000"},96    )97    await asyncio.sleep(0.01)98    await hass.async_block_till_done()99    state_obj = hass.states.get("sensor.ss1")100    assert state_obj.state == "416"101    listen_mock.stop()102async def test_switch_device(hass, aioclient_mock, qs_devices):103    """Test a switch device."""104    async def get_devices_json(method, url, data):105        return AiohttpClientMockResponse(method=method, url=url, json=qs_devices)106    config = {"qwikswitch": {"switches": ["@a00001"]}}107    aioclient_mock.get("http://127.0.0.1:2020/&device", side_effect=get_devices_json)108    listen_mock = MockLongPollSideEffect()109    aioclient_mock.get("http://127.0.0.1:2020/&listen", side_effect=listen_mock)110    assert await async_setup_component(hass, QWIKSWITCH, config)111    await hass.async_start()112    await hass.async_block_till_done()113    # verify initial state is off per the 'val' in qs_devices114    state_obj = hass.states.get("switch.switch_1")115    assert state_obj.state == "off"116    # ask hass to turn on and verify command is sent to device117    aioclient_mock.mock_calls.clear()118    aioclient_mock.get("http://127.0.0.1:2020/@a00001=100", json={"data": "OK"})119    await hass.services.async_call(120        "switch", "turn_on", {"entity_id": "switch.switch_1"}, blocking=True121    )122    await asyncio.sleep(0.01)123    assert (124        "GET",125        URL("http://127.0.0.1:2020/@a00001=100"),126        None,127        None,128    ) in aioclient_mock.mock_calls129    # verify state is on130    state_obj = hass.states.get("switch.switch_1")131    assert state_obj.state == "on"132    # ask hass to turn off and verify command is sent to device133    aioclient_mock.mock_calls.clear()134    aioclient_mock.get("http://127.0.0.1:2020/@a00001=0", json={"data": "OK"})135    await hass.services.async_call(136        "switch", "turn_off", {"entity_id": "switch.switch_1"}, blocking=True137    )138    assert (139        "GET",140        URL("http://127.0.0.1:2020/@a00001=0"),141        None,142        None,143    ) in aioclient_mock.mock_calls144    # verify state is off145    state_obj = hass.states.get("switch.switch_1")146    assert state_obj.state == "off"147    # check if setting the value in the network show in hass148    qs_devices[0]["val"] = "ON"149    listen_mock.queue_response(json=EMPTY_PACKET)150    await hass.async_block_till_done()151    state_obj = hass.states.get("switch.switch_1")152    assert state_obj.state == "on"153    listen_mock.stop()154async def test_light_device(hass, aioclient_mock, qs_devices):155    """Test a light device."""156    async def get_devices_json(method, url, data):157        return AiohttpClientMockResponse(method=method, url=url, json=qs_devices)158    config = {"qwikswitch": {}}159    aioclient_mock.get("http://127.0.0.1:2020/&device", side_effect=get_devices_json)160    listen_mock = MockLongPollSideEffect()161    aioclient_mock.get("http://127.0.0.1:2020/&listen", side_effect=listen_mock)162    assert await async_setup_component(hass, QWIKSWITCH, config)163    await hass.async_start()164    await hass.async_block_till_done()165    # verify initial state is on per the 'val' in qs_devices166    state_obj = hass.states.get("light.dim_3")167    assert state_obj.state == "on"168    assert state_obj.attributes["brightness"] == 255169    # ask hass to turn off and verify command is sent to device170    aioclient_mock.mock_calls.clear()171    aioclient_mock.get("http://127.0.0.1:2020/@a00003=0", json={"data": "OK"})172    await hass.services.async_call(173        "light", "turn_off", {"entity_id": "light.dim_3"}, blocking=True174    )175    await asyncio.sleep(0.01)176    assert (177        "GET",178        URL("http://127.0.0.1:2020/@a00003=0"),179        None,180        None,181    ) in aioclient_mock.mock_calls182    state_obj = hass.states.get("light.dim_3")183    assert state_obj.state == "off"184    # change brightness in network and check that hass updates185    qs_devices[2]["val"] = "280c55"  # half dimmed186    listen_mock.queue_response(json=EMPTY_PACKET)187    await asyncio.sleep(0.01)188    await hass.async_block_till_done()189    state_obj = hass.states.get("light.dim_3")190    assert state_obj.state == "on"191    assert 16 < state_obj.attributes["brightness"] < 240192    # turn off in the network and see that it is off in hass as well193    qs_devices[2]["val"] = "280c78"  # off194    listen_mock.queue_response(json=EMPTY_PACKET)195    await asyncio.sleep(0.01)196    await hass.async_block_till_done()197    state_obj = hass.states.get("light.dim_3")198    assert state_obj.state == "off"199    # ask hass to turn on and verify command is sent to device200    aioclient_mock.mock_calls.clear()201    aioclient_mock.get("http://127.0.0.1:2020/@a00003=100", json={"data": "OK"})202    await hass.services.async_call(203        "light", "turn_on", {"entity_id": "light.dim_3"}, blocking=True204    )205    assert (206        "GET",207        URL("http://127.0.0.1:2020/@a00003=100"),208        None,209        None,210    ) in aioclient_mock.mock_calls211    await hass.async_block_till_done()212    state_obj = hass.states.get("light.dim_3")213    assert state_obj.state == "on"214    listen_mock.stop()215async def test_button(hass, aioclient_mock, qs_devices):216    """Test that buttons fire an event."""217    async def get_devices_json(method, url, data):218        return AiohttpClientMockResponse(method=method, url=url, json=qs_devices)219    config = {"qwikswitch": {"button_events": "TOGGLE"}}220    aioclient_mock.get("http://127.0.0.1:2020/&device", side_effect=get_devices_json)221    listen_mock = MockLongPollSideEffect()222    aioclient_mock.get("http://127.0.0.1:2020/&listen", side_effect=listen_mock)223    assert await async_setup_component(hass, QWIKSWITCH, config)224    await hass.async_start()225    await hass.async_block_till_done()226    button_pressed = Mock()227    hass.bus.async_listen_once("qwikswitch.button.@a00002", button_pressed)228    listen_mock.queue_response(229        json={"id": "@a00002", "cmd": "TOGGLE"},230    )231    await asyncio.sleep(0.01)232    await hass.async_block_till_done()233    button_pressed.assert_called_once()234    listen_mock.stop()235async def test_failed_update_devices(hass, aioclient_mock):236    """Test that code behaves correctly when unable to get the devices."""237    config = {"qwikswitch": {}}238    aioclient_mock.get("http://127.0.0.1:2020/&device", exc=ClientError())239    listen_mock = MockLongPollSideEffect()240    aioclient_mock.get("http://127.0.0.1:2020/&listen", side_effect=listen_mock)241    assert not await async_setup_component(hass, QWIKSWITCH, config)242    await hass.async_start()243    await hass.async_block_till_done()244    listen_mock.stop()245async def test_single_invalid_sensor(hass, aioclient_mock, qs_devices):246    """Test that a single misconfigured sensor doesn't block the others."""247    config = {248        "qwikswitch": {249            "sensors": [250                {"name": "ss1", "id": "@a00001", "channel": 1, "type": "qwikcord"},251                {"name": "ss2", "id": "@a00002", "channel": 1, "type": "ERROR_TYPE"},252                {"name": "ss3", "id": "@a00003", "channel": 1, "type": "qwikcord"},253            ]254        }255    }256    aioclient_mock.get("http://127.0.0.1:2020/&device", json=qs_devices)257    listen_mock = MockLongPollSideEffect()258    aioclient_mock.get("http://127.0.0.1:2020/&listen", side_effect=listen_mock)259    assert await async_setup_component(hass, QWIKSWITCH, config)260    await hass.async_start()261    await hass.async_block_till_done()262    await asyncio.sleep(0.01)263    assert hass.states.get("sensor.ss1")264    assert not hass.states.get("sensor.ss2")265    assert hass.states.get("sensor.ss3")266    listen_mock.stop()267async def test_non_binary_sensor_with_binary_args(268    hass, aioclient_mock, qs_devices, caplog269):270    """Test that the system logs a warning when a non-binary device has binary specific args."""271    config = {272        "qwikswitch": {273            "sensors": [274                {275                    "name": "ss1",276                    "id": "@a00001",277                    "channel": 1,278                    "type": "qwikcord",279                    "invert": True,280                },281            ]282        }283    }284    aioclient_mock.get("http://127.0.0.1:2020/&device", json=qs_devices)285    listen_mock = MockLongPollSideEffect()286    aioclient_mock.get("http://127.0.0.1:2020/&listen", side_effect=listen_mock)287    assert await async_setup_component(hass, QWIKSWITCH, config)288    await hass.async_start()289    await hass.async_block_till_done()290    await asyncio.sleep(0.01)291    await hass.async_block_till_done()292    assert hass.states.get("sensor.ss1")293    assert "invert should only be used for binary_sensors" in caplog.text294    listen_mock.stop()295async def test_non_relay_switch(hass, aioclient_mock, qs_devices, caplog):296    """Test that the system logs a warning when a switch is configured for a device that is not a relay."""297    config = {"qwikswitch": {"switches": ["@a00003"]}}298    aioclient_mock.get("http://127.0.0.1:2020/&device", json=qs_devices)299    listen_mock = MockLongPollSideEffect()300    aioclient_mock.get("http://127.0.0.1:2020/&listen", side_effect=listen_mock)301    assert await async_setup_component(hass, QWIKSWITCH, config)302    await hass.async_start()303    await hass.async_block_till_done()304    await asyncio.sleep(0.01)305    await hass.async_block_till_done()306    assert not hass.states.get("switch.dim_3")307    assert "You specified a switch that is not a relay @a00003" in caplog.text308    listen_mock.stop()309async def test_unknown_device(hass, aioclient_mock, qs_devices, caplog):310    """Test that the system logs a warning when a network device has unknown type."""311    config = {"qwikswitch": {}}312    qs_devices[1]["type"] = "ERROR_TYPE"313    aioclient_mock.get("http://127.0.0.1:2020/&device", json=qs_devices)314    listen_mock = MockLongPollSideEffect()315    aioclient_mock.get("http://127.0.0.1:2020/&listen", side_effect=listen_mock)316    assert await async_setup_component(hass, QWIKSWITCH, config)317    await hass.async_start()318    await hass.async_block_till_done()319    await asyncio.sleep(0.01)320    await hass.async_block_till_done()321    assert hass.states.get("light.switch_1")322    assert not hass.states.get("light.light_2")323    assert hass.states.get("light.dim_3")324    assert "Ignored unknown QSUSB device" in caplog.text325    listen_mock.stop()326async def test_no_discover_info(hass, hass_storage, aioclient_mock, caplog):327    """Test that discovery with no discovery_info does not result in errors."""328    config = {329        "qwikswitch": {},330        "light": {"platform": "qwikswitch"},331        "switch": {"platform": "qwikswitch"},332        "sensor": {"platform": "qwikswitch"},333        "binary_sensor": {"platform": "qwikswitch"},334    }335    aioclient_mock.get(336        "http://127.0.0.1:2020/&device",337        json=[338            {339                "id": "@a00001",340                "name": "Switch 1",341                "type": "ERROR_TYPE",342                "val": "OFF",343                "time": "1522777506",344                "rssi": "51%",345            },346        ],347    )348    listen_mock = MockLongPollSideEffect()349    aioclient_mock.get("http://127.0.0.1:2020/&listen", side_effect=listen_mock)350    assert await async_setup_component(hass, "light", config)351    assert await async_setup_component(hass, "switch", config)352    assert await async_setup_component(hass, "sensor", config)353    assert await async_setup_component(hass, "binary_sensor", config)354    await hass.async_start()355    await hass.async_block_till_done()356    assert "Error while setting up qwikswitch platform" not in caplog.text...snat_dynamic_info.py
Source:snat_dynamic_info.py  
1import sys2import pdb3import os4from debug.common import init_neutron_client5from debug.common import discovery6PORT_ID_PREFEX = 107class SNATInfo:8    """9    Uses OpenStack SDK to retrieve all relevant information about a VM and the network it is on, for the SNAT Checker10    """11    def __init__(self, vm_name, neutron):12        self.neutron = neutron13        self.vm_name = discovery.vmname_parse(vm_name)14        self.source_port_dict = discovery.get_port_dict(self.vm_name, self.neutron)15        self.source_host_id = self.source_port_dict['binding:host_id']16        self.fixed_ip_address = self.source_port_dict['fixed_ips'][0]['ip_address']17        self.tenant_network_id = self.source_port_dict['network_id']18        self.sg_port = discovery.get_sg_port(self.tenant_network_id, self.neutron)19        self.router_id = self.sg_port['device_id']20        self.qr_port_id, self.dest_mac_address = discovery.get_qr_port(self.router_id, self.neutron)21        self.qg_port = discovery.get_qg_port(self.router_id, self.neutron)22        self.external_network_id = self.qg_port['network_id']23        self.snat_external_ip = self.qg_port['fixed_ips'][0]['ip_address']24        self.dest_ip_address = "8.8.8.8"25        self.vif_names = self.get_vif_list()26        self.ns_vif_names = self.get_ns_vif_list()27        self.snat_host_id = self.sg_port['binding:host_id']28        snat_host = self.determine_snat_host()29        if snat_host == "local snat":30            self.local_listen_dict = self.init_local_snat_process()31            self.remote_listen_dict = {}32        else:33            self.local_listen_dict, self.remote_listen_dict = self.init_remote_snat_process()34        self.inject_icmp_dict = self.format_inject_dict()35    def init_local_snat_process(self):36        local_listen_dict = dict()37        local_listen_dict['checker_type'] = "SNAT"38        local_listen_dict['packet_type'] = "ICMP"39        local_listen_dict['vm_name'] = self.vm_name40        local_listen_dict['src_ip_address'] = self.fixed_ip_address41        local_listen_dict['src_mac_address'] = self.source_port_dict['mac_address']42        local_listen_dict['dest_ip_address'] = self.dest_ip_address43        local_listen_dict['dest_mac_address'] = self.dest_mac_address44        local_listen_dict['host_id'] = self.source_host_id45        local_listen_dict['port_id'] = self.source_port_dict['id']46        local_listen_dict['network_label'] = discovery.get_network_label(self.external_network_id, self.neutron)47        local_listen_dict['network_type'] = discovery.get_network_type(self.external_network_id, self.neutron)48        local_listen_dict['nic_filter'] = "icmp and  ((src %s and dst %s) or (src %s and dst %s)) " % (self.snat_external_ip, self.dest_ip_address, self.dest_ip_address, self.snat_external_ip)49        local_listen_dict['bridge_name'] = discovery.get_bridge_name(local_listen_dict['network_label'], self.source_host_id, self.neutron)50        local_listen_dict['tag'] = "VM SOURCE"51        local_listen_dict['vif_names'] = self.vif_names52        local_listen_dict['ns_vif_names'] = self.ns_vif_names53        local_listen_dict['snat_host'] = "local"54        return local_listen_dict55    def init_remote_snat_process(self):56        local_listen_dict = dict()57        local_listen_dict['checker_type'] = "SNAT"58        local_listen_dict['packet_type'] = "ICMP"59        local_listen_dict['vm_name'] = self.vm_name60        local_listen_dict['src_ip_address'] = self.fixed_ip_address61        local_listen_dict['src_mac_address'] = self.source_port_dict['mac_address']62        local_listen_dict['dest_ip_address'] = self.dest_ip_address63        local_listen_dict['dest_mac_address'] = self.dest_mac_address64        local_listen_dict['host_id'] = self.source_host_id65        local_listen_dict['port_id'] = self.source_port_dict['id']66        local_listen_dict['network_label'] = discovery.get_network_label(self.tenant_network_id, self.neutron)67        local_listen_dict['network_type'] = discovery.get_network_type(self.tenant_network_id, self.neutron)68        local_listen_dict['nic_filter'] = "icmp and  ((src %s and dst %s) or (src %s and dst %s)) " % (self.fixed_ip_address, self.dest_ip_address, self.dest_ip_address, self.fixed_ip_address)69        local_listen_dict['snat_host'] = "remote"70        tunnel_ip = discovery.get_tunnel_ip(self.source_host_id, self.neutron)71        local_listen_dict['tunnel_ip'] = tunnel_ip72        local_listen_dict['vxlan_filter'] = "(src %s or dst %s) and udp port (4789)" % (local_listen_dict['tunnel_ip'], local_listen_dict['tunnel_ip'])73        if local_listen_dict['network_type'] == "vxlan":74            local_listen_dict['tunnel_port'] = discovery.get_tunnel_port(self.source_host_id, local_listen_dict['tunnel_ip'], self.neutron)75        else:76            local_listen_dict['tunnel_port'] = "None"77        local_listen_dict['bridge_name'] = discovery.get_bridge_name(local_listen_dict['network_label'], self.source_host_id, self.neutron)78        local_listen_dict['tag'] = "VM SOURCE"79        local_listen_dict['vif_names'] = self.vif_names80        local_listen_dict['ns_vif_names'] = []81        vif_buffer = self.ns_vif_names82        for vif in vif_buffer:83            for vif_name in list(vif.keys()):84                if "qr" in vif_name:85                    local_listen_dict['ns_vif_names'].append(vif)86                    break87        remote_listen_dict = dict()88        remote_listen_dict['checker_type'] = "SNAT"89        remote_listen_dict['packet_type'] = "ICMP"90        remote_listen_dict['vm_name'] = self.vm_name91        remote_listen_dict['src_ip_address'] = self.fixed_ip_address92        remote_listen_dict['src_mac_address'] = self.source_port_dict['mac_address']93        remote_listen_dict['dest_ip_address'] = self.dest_ip_address94        remote_listen_dict['dest_mac_address'] = self.dest_mac_address95        remote_listen_dict['host_id'] = self.snat_host_id96        remote_listen_dict['port_id'] = self.source_port_dict['id']97        remote_listen_dict['network_label_remote_ext'] = discovery.get_network_label(self.external_network_id, self.neutron)98        remote_listen_dict['network_type_remote_ext'] = discovery.get_network_type(self.external_network_id, self.neutron)99        remote_listen_dict['network_label'] = discovery.get_network_label(self.tenant_network_id, self.neutron)100        remote_listen_dict['network_type'] = discovery.get_network_type(self.tenant_network_id, self.neutron)101        remote_listen_dict['nic_filter'] = "icmp and  ((src %s and dst %s) or (src %s and dst %s)) " % (self.fixed_ip_address, self.dest_ip_address, self.dest_ip_address, self.fixed_ip_address)102        remote_listen_dict['ext_nic_filter'] = "icmp and  ((src %s and dst %s) or (src %s and dst %s)) " % (self.snat_external_ip, self.dest_ip_address, self.dest_ip_address, self.snat_external_ip)103        tunnel_ip = discovery.get_tunnel_ip(self.snat_host_id, self.neutron)104        remote_listen_dict['tunnel_ip'] = tunnel_ip105        remote_listen_dict['vxlan_filter'] = "(src %s or dst %s) and udp port (4789)" % (remote_listen_dict['tunnel_ip'], remote_listen_dict['tunnel_ip'])106        if remote_listen_dict['network_type'] == "vxlan":107            remote_listen_dict['tunnel_port'] = discovery.get_tunnel_port(self.snat_host_id, remote_listen_dict['tunnel_ip'], self.neutron)108        else:109            remote_listen_dict['tunnel_port'] = "None"110        remote_listen_dict['bridge_name'] = discovery.get_bridge_name(remote_listen_dict['network_label'], self.snat_host_id, self.neutron)111        remote_listen_dict['bridge_name_remote_ext'] = discovery.get_bridge_name(remote_listen_dict['network_label_remote_ext'], self.snat_host_id, self.neutron)112        remote_listen_dict['tag'] = "SNAT NS"113        remote_listen_dict['vif_names'] = []114        remote_listen_dict['ns_vif_names'] = []115        for vif in vif_buffer:116            for vif_name in list(vif.keys()):117                if "qg" in vif_name or "sg" in vif_name:118                    remote_listen_dict['ns_vif_names'].append(vif)119                    break120        return local_listen_dict, remote_listen_dict121    def format_inject_dict(self):122        inject_icmp_dict = dict()123        inject_icmp_dict.update(self.local_listen_dict)124        inject_icmp_dict['payload'] = "abcd" * 3125        for vif in inject_icmp_dict['vif_names']:126            if "qbr" in list(vif.keys())[0]:127               inject_port = list(vif.keys())[0]128               break129        inject_icmp_dict['inject_port'] = inject_port130        return inject_icmp_dict131    def get_vif_list(self):132        vif_list = []133        vif_names = discovery.get_vif_names(self.source_port_dict['id'])134        for port_type, vif_name in vif_names.items():135            vif = dict()136            vif[vif_name] = dict()137            vif[vif_name]['filter'] = "icmp and ((src %s and dst %s) or (src %s and dst %s)) " % (self.fixed_ip_address, self.dest_ip_address, self.dest_ip_address, self.fixed_ip_address)138            vif[vif_name]['is_ns'] = "None"139            vif[vif_name]['port_type'] = port_type140            vif_list.append(vif)141        return vif_list142    def get_ns_vif_list(self):143        ns_vif_list = []144        ns_vif_names = discovery.get_snat_interfaces(self.router_id, self.qr_port_id, self.sg_port['id'], self.qg_port['id'])145        for vif_name, netns in ns_vif_names.items():146            vif = dict()147            vif[vif_name] = dict()148            if "qg" in vif_name:149            	vif[vif_name]['filter'] = "icmp and host %s and host %s " % (self.snat_external_ip, self.dest_ip_address)150            else:151                vif[vif_name]['filter'] = "icmp and host %s and host %s " % (self.fixed_ip_address, self.dest_ip_address)152            vif[vif_name]['is_ns'] = netns153            vif[vif_name]['port_type'] = vif_name154            ns_vif_list.append(vif)155        return ns_vif_list156    def determine_snat_host(self):157        if self.snat_host_id == self.source_host_id:158            self.flag = "local"159            return "local snat"160        else:161            self.flag = "remote"162            return "remote snat"163    def get_local_dict(self):164        return self.local_listen_dict165    def get_remote_dict(self):166        return self.remote_listen_dict167    def get_inject_dict(self):168        return self.inject_icmp_dict169    def get_flag(self):...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.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
