Best Python code snippet using autotest_python
view.py
Source:view.py
1################################################2# File: view.py #3# #4# Author(s): { #5# Hifumi1337 <https://github.com/Hifumi1337> #6# } #7################################################8import tkinter, customtkinter, platform, time, json9from tkinter import PhotoImage, messagebox10from subprocess import getoutput11from os.path import getsize, exists12if platform.system() == 'Darwin':13 adb = "$HOME/Library/Android/sdk/platform-tools/adb"14elif platform.system() == 'Windows':15 adb = "%LOCALAPPDATA%\Android\sdk\platform-tools\\adb"16elif platform.system() == 'Linux':17 whoami = getoutput("whoami")18 adb = f"/home/{whoami}/Android/Sdk/platform-tools/adb"19if platform.system() == 'Darwin':20 import sys, os21 22 def import_resources(relative_path):23 try:24 base_path = sys._MEIPASS25 except Exception:26 base_path = os.path.abspath(".")27 return os.path.join(base_path, relative_path)28INFO_CODE = "[INFO]"29class View(customtkinter.CTk):30 def __init__(self, version):31 super().__init__()32 self.title(f"Droid | v{version}")33 self.geometry("1400x750")34 self.set_appearance_mode("Dark")35 self.grid_columnconfigure(1, weight=1)36 self.grid_rowconfigure(0, weight=1)37 if platform.system() == 'Darwin':38 img = PhotoImage(file=f"{import_resources('assets/droid.png')}")39 self.iconphoto(True, img)40 # Sidebar41 self.frame_left = customtkinter.CTkFrame(master=self, width=200, corner_radius=0)42 self.frame_left.grid(row=0, column=0, sticky="nswe")43 self.frame_middle = customtkinter.CTkFrame(master=self)44 self.frame_middle.grid(row=0, column=1, sticky="nswe", padx=20, pady=20)45 self.frame_right = customtkinter.CTkFrame(master=self)46 self.frame_right.grid(row=0, column=2, sticky="nswe", padx=20, pady=20)47 self.header = customtkinter.CTkLabel(master=self.frame_left, text=f"Droid | v{version}", text_font=("Roboto Medium", -18)) 48 self.header.grid(row=1, column=0, pady=10, padx=10)49 self.connect_ip_addr = customtkinter.CTkButton(master=self.frame_left, text="Connect", command=self.btn_connect)50 self.connect_ip_addr.grid(row=2, column=0, pady=10, padx=20)51 self.disconnect_ip_addr = customtkinter.CTkButton(master=self.frame_left, text="Disconnect", command=self.btn_disconnect)52 self.disconnect_ip_addr.grid(row=3, column=0, pady=10, padx=20)53 self.reboot_android = customtkinter.CTkButton(master=self.frame_left, text="Reboot", command=self.btn_reboot)54 self.reboot_android.grid(row=4, column=0, pady=10, padx=20)55 self.screenshot_android = customtkinter.CTkButton(master=self.frame_left, text="Screenshot", command=self.btn_screenshot)56 self.screenshot_android.grid(row=5, column=0, pady=10, padx=20)57 self.download_android = customtkinter.CTkButton(master=self.frame_left, text="Download File", command=self.btn_download_file)58 self.download_android.grid(row=6, column=0, pady=10, padx=20)59 self.upload_android = customtkinter.CTkButton(master=self.frame_left, text="Upload File", command=self.btn_upload_file)60 self.upload_android.grid(row=7, column=0, pady=10, padx=20)61 self.file_modifier = customtkinter.CTkButton(master=self.frame_left, text="Modify", command=self.btn_modify_file)62 self.file_modifier.grid(row=8, column=0, pady=10, padx=20)63 self.upload_apk = customtkinter.CTkButton(master=self.frame_left, text="Upload APK", command=self.btn_upload_apk)64 self.upload_apk.grid(row=9, column=0, pady=10, padx=20)65 self.remove_apk = customtkinter.CTkButton(master=self.frame_left, text="Remove APK", command=self.btn_remove_apk)66 self.remove_apk.grid(row=10, column=0, pady=10, padx=20)67 self.set_bluetooth_status = customtkinter.CTkButton(master=self.frame_left, text="Bluetooth", command=self.btn_bluetooth)68 self.set_bluetooth_status.grid(row=11, column=0, pady=10, padx=20)69 self.set_wifi_status = customtkinter.CTkButton(master=self.frame_left, text="Wifi", command=self.btn_wifi)70 self.set_wifi_status.grid(row=12, column=0, pady=10, padx=20)71 self.close_app = customtkinter.CTkButton(master=self.frame_left, text="Close Droid", command=self.btn_destroy)72 self.close_app.grid(row=13, column=0, pady=10, padx=20)73 self.help_menu = customtkinter.CTkButton(master=self.frame_left, text="Help", command=self.btn_help)74 self.help_menu.grid(row=14, column=0, pady=10, padx=20)75 self.droid_logs = customtkinter.CTkLabel(master=self.frame_right, text=f"Droid Logs | v{version}")76 self.droid_logs.grid(row=0, column=1, columnspan=5, rowspan=1, pady=5, padx=5, sticky="nsew")77 78 self.mainloop()79 def btn_connect(self):80 # Buttons81 try:82 self.start_file_download.destroy()83 except AttributeError:84 pass85 try:86 self.start_file_upload.destroy()87 except AttributeError:88 pass89 try:90 self.start_apk_upload.destroy()91 except AttributeError:92 pass93 try:94 self.start_apk_remove.destroy()95 except AttributeError:96 pass97 try:98 self.start_disconnect.destroy()99 except AttributeError:100 pass101 try:102 self.start_reboot.destroy()103 except AttributeError:104 pass105 try:106 self.start_screenshot.destroy()107 except AttributeError:108 pass109 try:110 self.start_bluetooth.destroy()111 except AttributeError:112 pass113 try:114 self.stop_bluetooth.destroy()115 except AttributeError:116 pass117 try:118 self.start_wifi.destroy()119 except AttributeError:120 pass121 try:122 self.stop_wifi.destroy()123 except AttributeError:124 pass125 try:126 self.start_file_modification.destroy()127 except AttributeError:128 pass129 # Input Fields130 try:131 self.download_file.destroy()132 except AttributeError:133 pass134 try:135 self.upload_file.destroy()136 except AttributeError:137 pass138 try:139 self.filename.destroy()140 except AttributeError:141 pass142 try:143 self.name_of_apk.destroy()144 except AttributeError:145 pass146 try:147 self.apk_package_name.destroy()148 except AttributeError:149 pass150 try:151 self.ip_addr.destroy()152 except AttributeError:153 pass154 try:155 self.screenshot_file.destroy()156 except AttributeError:157 pass158 try:159 self.name_of_file.destroy()160 except AttributeError:161 pass162 try:163 self.new_content.destroy()164 except AttributeError:165 pass166 self.ip_addr = customtkinter.CTkEntry(master=self.frame_middle, width=400, placeholder_text="IP Address of the Android device")167 self.ip_addr.grid(row=6, column=1, pady=10, padx=20)168 self.json_file_name = customtkinter.CTkEntry(master=self.frame_middle, width=400, placeholder_text="Location of the JSON file on the local system (ex: ~/Documents/droid_ip_addr.json)")169 self.json_file_name.grid(row=7, column=1, pady=10, padx=20)170 self.ip_addr_json = customtkinter.CTkEntry(master=self.frame_middle, width=400, placeholder_text="Key assigned in JSON file (ex: localhost)")171 self.ip_addr_json.grid(row=8, column=1, pady=10, padx=20)172 def submit():173 if exists(self.json_file_name.get()) and getsize(self.json_file_name.get()) > 4:174 try:175 with open(self.json_file_name.get(), "r") as ip_file:176 ip_addr = json.load(ip_file)177 except FileNotFoundError:178 pass179 try:180 connect_ip_addr = getoutput(f'{adb} connect {ip_addr[self.ip_addr_json.get()]}')181 except KeyError:182 connect_ip_addr = getoutput(f'{adb} connect {self.ip_addr.get()}')183 else:184 connect_ip_addr = getoutput(f'{adb} connect {self.ip_addr.get()}')185 print(f"{INFO_CODE} {connect_ip_addr}")186 self.droid_logs_lvl_1 = customtkinter.CTkLabel(master=self.frame_right, text=f"{INFO_CODE} {connect_ip_addr}", corner_radius=6, fg_color=("white", "gray38"))187 self.droid_logs_lvl_1.grid(row=1, column=1, columnspan=5, rowspan=1, pady=5, padx=5, sticky="nsew")188 self.start_connect = customtkinter.CTkButton(master=self.frame_middle, text="Submit", command=submit)189 self.start_connect.grid(row=9, column=1, pady=10, padx=20)190 def btn_download_file(self):191 # Buttons192 try:193 self.start_connect.destroy()194 except AttributeError:195 pass196 try:197 self.start_file_upload.destroy()198 except AttributeError:199 pass200 try:201 self.start_apk_upload.destroy()202 except AttributeError:203 pass204 try:205 self.start_apk_remove.destroy()206 except AttributeError:207 pass208 try:209 self.start_disconnect.destroy()210 except AttributeError:211 pass212 try:213 self.start_reboot.destroy()214 except AttributeError:215 pass216 try:217 self.start_screenshot.destroy()218 except AttributeError:219 pass220 try:221 self.start_bluetooth.destroy()222 except AttributeError:223 pass224 try:225 self.stop_bluetooth.destroy()226 except AttributeError:227 pass228 try:229 self.start_wifi.destroy()230 except AttributeError:231 pass232 try:233 self.stop_wifi.destroy()234 except AttributeError:235 pass236 try:237 self.start_file_modification.destroy()238 except AttributeError:239 pass240 # Input Fields241 try:242 self.ip_addr.destroy()243 except AttributeError:244 pass245 try:246 self.json_file_name.destroy()247 except AttributeError:248 pass249 try:250 self.ip_addr_json.destroy()251 except AttributeError:252 pass253 try:254 self.upload_file.destroy()255 except AttributeError:256 pass257 try:258 self.filename.destroy()259 except AttributeError:260 pass261 try:262 self.name_of_apk.destroy()263 except AttributeError:264 pass265 try:266 self.apk_package_name.destroy()267 except AttributeError:268 pass269 try:270 self.ip_addr.destroy()271 except AttributeError:272 pass273 try:274 self.screenshot_file.destroy()275 except AttributeError:276 pass277 try:278 self.name_of_file.destroy()279 except AttributeError:280 pass281 try:282 self.new_content.destroy()283 except AttributeError:284 pass285 self.download_file = customtkinter.CTkEntry(master=self.frame_middle, width=400, placeholder_text="Location of File on the Android device")286 self.download_file.grid(row=6, column=1, pady=10, padx=20)287 def submit():288 download_android_file = getoutput(f'{adb} pull {self.download_file.get()}')289 print(f"{INFO_CODE} {download_android_file}")290 self.droid_logs_lvl_2 = customtkinter.CTkLabel(master=self.frame_right, text=f"{INFO_CODE} {download_android_file}", corner_radius=6, fg_color=("white", "gray38"))291 self.droid_logs_lvl_2.grid(row=2, column=1, columnspan=5, rowspan=1, pady=5, padx=5, sticky="nsew")292 self.start_file_download = customtkinter.CTkButton(master=self.frame_middle, text="Submit", command=submit)293 self.start_file_download.grid(row=7, column=1, pady=10, padx=20)294 def btn_upload_file(self):295 # Buttons296 try:297 self.start_connect.destroy()298 except AttributeError:299 pass300 try:301 self.start_file_download.destroy()302 except AttributeError:303 pass304 try:305 self.start_apk_upload.destroy()306 except AttributeError:307 pass308 try:309 self.start_apk_remove.destroy()310 except AttributeError:311 pass312 try:313 self.start_disconnect.destroy()314 except AttributeError:315 pass316 try:317 self.start_reboot.destroy()318 except AttributeError:319 pass320 try:321 self.start_screenshot.destroy()322 except AttributeError:323 pass324 try:325 self.start_bluetooth.destroy()326 except AttributeError:327 pass328 try:329 self.stop_bluetooth.destroy()330 except AttributeError:331 pass332 try:333 self.start_wifi.destroy()334 except AttributeError:335 pass336 try:337 self.stop_wifi.destroy()338 except AttributeError:339 pass340 try:341 self.start_file_modification.destroy()342 except AttributeError:343 pass344 # Input Fields345 try:346 self.ip_addr.destroy()347 except AttributeError:348 pass349 try:350 self.json_file_name.destroy()351 except AttributeError:352 pass353 try:354 self.ip_addr_json.destroy()355 except AttributeError:356 pass357 try:358 self.download_file.destroy()359 except AttributeError:360 pass361 try:362 self.name_of_apk.destroy()363 except AttributeError:364 pass365 try:366 self.apk_package_name.destroy()367 except AttributeError:368 pass369 try:370 self.ip_addr.destroy()371 except AttributeError:372 pass373 try:374 self.screenshot_file.destroy()375 except AttributeError:376 pass377 try:378 self.name_of_file.destroy()379 except AttributeError:380 pass381 try:382 self.new_content.destroy()383 except AttributeError:384 pass385 self.upload_file = customtkinter.CTkEntry(master=self.frame_middle, width=400, placeholder_text="Location to push the file on the Android device")386 self.upload_file.grid(row=6, column=1, pady=10, padx=20)387 self.filename = customtkinter.CTkEntry(master=self.frame_middle, width=400, placeholder_text="Name of the file on your local machine")388 self.filename.grid(row=7, column=1, pady=10, padx=20)389 def submit():390 upload_android_file = getoutput(f'{adb} push {self.filename.get()} {self.upload_file.get()}')391 print(f"{INFO_CODE} {upload_android_file}")392 self.droid_logs_lvl_3 = customtkinter.CTkLabel(master=self.frame_right, text=f"{INFO_CODE} {upload_android_file}", corner_radius=6, fg_color=("white", "gray38"))393 394 self.droid_logs_lvl_3.grid(row=3, column=1, columnspan=5, rowspan=1, pady=5, padx=5, sticky="nsew")395 self.start_file_upload = customtkinter.CTkButton(master=self.frame_middle, text="Submit", command=submit)396 self.start_file_upload.grid(row=8, column=1, pady=10, padx=20)397 def btn_upload_apk(self):398 # Buttons399 try:400 self.start_connect.destroy()401 except AttributeError:402 pass403 try:404 self.start_file_download.destroy()405 except AttributeError:406 pass407 try:408 self.start_file_upload.destroy()409 except AttributeError:410 pass411 try:412 self.start_apk_remove.destroy()413 except AttributeError:414 pass415 try:416 self.start_disconnect.destroy()417 except AttributeError:418 pass419 try:420 self.start_reboot.destroy()421 except AttributeError:422 pass423 try:424 self.start_screenshot.destroy()425 except AttributeError:426 pass427 try:428 self.start_bluetooth.destroy()429 except AttributeError:430 pass431 try:432 self.stop_bluetooth.destroy()433 except AttributeError:434 pass435 try:436 self.start_wifi.destroy()437 except AttributeError:438 pass439 try:440 self.stop_wifi.destroy()441 except AttributeError:442 pass443 try:444 self.start_file_modification.destroy()445 except AttributeError:446 pass447 # Input Fields448 try:449 self.ip_addr.destroy()450 except AttributeError:451 pass452 try:453 self.json_file_name.destroy()454 except AttributeError:455 pass456 try:457 self.ip_addr_json.destroy()458 except AttributeError:459 pass460 try:461 self.download_file.destroy()462 except AttributeError:463 pass464 try:465 self.upload_file.destroy()466 except AttributeError:467 pass468 try:469 self.filename.destroy()470 except AttributeError:471 pass472 try:473 self.apk_package_name.destroy()474 except AttributeError:475 pass476 try:477 self.ip_addr.destroy()478 except AttributeError:479 pass480 try:481 self.screenshot_file.destroy()482 except AttributeError:483 pass484 try:485 self.name_of_file.destroy()486 except AttributeError:487 pass488 try:489 self.new_content.destroy()490 except AttributeError:491 pass492 self.name_of_apk = customtkinter.CTkEntry(master=self.frame_middle, width=400, placeholder_text="Absolute path of the APK")493 self.name_of_apk.grid(row=6, column=1, pady=10, padx=20)494 def submit():495 upload_android_apk = getoutput(f'{adb} install -r {self.name_of_apk.get()}')496 print(f"{INFO_CODE} {upload_android_apk}")497 self.droid_logs_lvl_4 = customtkinter.CTkLabel(master=self.frame_right, text=f"{INFO_CODE} {upload_android_apk}", corner_radius=6, fg_color=("white", "gray38"))498 499 self.droid_logs_lvl_4.grid(row=4, column=1, columnspan=5, rowspan=1, pady=5, padx=5, sticky="nsew")500 501 self.start_apk_upload = customtkinter.CTkButton(master=self.frame_middle, text="Submit", command=submit)502 self.start_apk_upload.grid(row=7, column=1, pady=10, padx=20)503 def btn_remove_apk(self):504 # Buttons505 try:506 self.start_connect.destroy()507 except AttributeError:508 pass509 try:510 self.start_file_download.destroy()511 except AttributeError:512 pass513 try:514 self.start_file_upload.destroy()515 except AttributeError:516 pass517 try:518 self.start_apk_upload.destroy()519 except AttributeError:520 pass521 try:522 self.start_disconnect.destroy()523 except AttributeError:524 pass525 try:526 self.start_reboot.destroy()527 except AttributeError:528 pass529 try:530 self.start_screenshot.destroy()531 except AttributeError:532 pass533 try:534 self.start_bluetooth.destroy()535 except AttributeError:536 pass537 try:538 self.stop_bluetooth.destroy()539 except AttributeError:540 pass541 try:542 self.start_wifi.destroy()543 except AttributeError:544 pass545 try:546 self.stop_wifi.destroy()547 except AttributeError:548 pass549 try:550 self.start_file_modification.destroy()551 except AttributeError:552 pass553 # Input Fields554 try:555 self.ip_addr.destroy()556 except AttributeError:557 pass558 try:559 self.json_file_name.destroy()560 except AttributeError:561 pass562 try:563 self.ip_addr_json.destroy()564 except AttributeError:565 pass566 try:567 self.download_file.destroy()568 except AttributeError:569 pass570 try:571 self.upload_file.destroy()572 except AttributeError:573 pass574 try:575 self.filename.destroy()576 except AttributeError:577 pass578 try:579 self.name_of_apk.destroy()580 except AttributeError:581 pass582 try:583 self.ip_addr.destroy()584 except AttributeError:585 pass586 try:587 self.screenshot_file.destroy()588 except AttributeError:589 pass590 try:591 self.name_of_file.destroy()592 except AttributeError:593 pass594 try:595 self.new_content.destroy()596 except AttributeError:597 pass598 self.apk_package_name = customtkinter.CTkEntry(master=self.frame_middle, width=400, placeholder_text="Package Name for APK")599 self.apk_package_name.grid(row=6, column=1, pady=10, padx=20)600 def submit():601 remove_android_apk = getoutput(f'{adb} uninstall {self.apk_package_name.get()}')602 print(f"{INFO_CODE} {remove_android_apk}")603 self.droid_logs_lvl_5 = customtkinter.CTkLabel(master=self.frame_right, text=f"{INFO_CODE} {remove_android_apk}", corner_radius=6, fg_color=("white", "gray38"))604 self.droid_logs_lvl_5.grid(row=5, column=1, columnspan=5, rowspan=1, pady=5, padx=5, sticky="nsew")605 self.start_apk_remove = customtkinter.CTkButton(master=self.frame_middle, text="Submit", command=submit)606 self.start_apk_remove.grid(row=7, column=1, pady=10, padx=20)607 608 def btn_disconnect(self):609 # Buttons610 try:611 self.start_connect.destroy()612 except AttributeError:613 pass614 try:615 self.start_file_download.destroy()616 except AttributeError:617 pass618 try:619 self.start_file_upload.destroy()620 except AttributeError:621 pass622 try:623 self.start_apk_upload.destroy()624 except AttributeError:625 pass626 try:627 self.start_apk_remove.destroy()628 except AttributeError:629 pass630 try:631 self.start_reboot.destroy()632 except AttributeError:633 pass634 try:635 self.start_screenshot.destroy()636 except AttributeError:637 pass638 try:639 self.start_bluetooth.destroy()640 except AttributeError:641 pass642 try:643 self.stop_bluetooth.destroy()644 except AttributeError:645 pass646 try:647 self.start_wifi.destroy()648 except AttributeError:649 pass650 try:651 self.stop_wifi.destroy()652 except AttributeError:653 pass654 try:655 self.start_file_modification.destroy()656 except AttributeError:657 pass658 # Input Fields659 try:660 self.ip_addr.destroy()661 except AttributeError:662 pass663 try:664 self.json_file_name.destroy()665 except AttributeError:666 pass667 try:668 self.ip_addr_json.destroy()669 except AttributeError:670 pass671 try:672 self.download_file.destroy()673 except AttributeError:674 pass675 try:676 self.upload_file.destroy()677 except AttributeError:678 pass679 try:680 self.filename.destroy()681 except AttributeError:682 pass683 try:684 self.name_of_apk.destroy()685 except AttributeError:686 pass687 try:688 self.apk_package_name.destroy()689 except AttributeError:690 pass691 try:692 self.screenshot_file.destroy()693 except AttributeError:694 pass695 try:696 self.name_of_file.destroy()697 except AttributeError:698 pass699 try:700 self.new_content.destroy()701 except AttributeError:702 pass703 self.ip_addr = customtkinter.CTkEntry(master=self.frame_middle, width=400, placeholder_text="IP Address of the Android device (leave blank to disconnect everything)")704 self.ip_addr.grid(row=6, column=1, pady=10, padx=20)705 def submit():706 disconnect_ip_addr = getoutput(f'{adb} disconnect {self.ip_addr.get()}')707 print(f"{INFO_CODE} {disconnect_ip_addr}")708 self.droid_logs_lvl_6 = customtkinter.CTkLabel(master=self.frame_right, text=f"{INFO_CODE} {disconnect_ip_addr}", corner_radius=6, fg_color=("white", "gray38"))709 self.droid_logs_lvl_6.grid(row=6, column=1, columnspan=5, rowspan=1, pady=5, padx=5, sticky="nsew")710 self.start_disconnect = customtkinter.CTkButton(master=self.frame_middle, text="Submit", command=submit)711 self.start_disconnect.grid(row=7, column=1, pady=10, padx=20)712 def btn_reboot(self):713 # Buttons714 try:715 self.start_connect.destroy()716 except AttributeError:717 pass718 try:719 self.start_file_download.destroy()720 except AttributeError:721 pass722 try:723 self.start_file_upload.destroy()724 except AttributeError:725 pass726 try:727 self.start_apk_upload.destroy()728 except AttributeError:729 pass730 try:731 self.start_apk_remove.destroy()732 except AttributeError:733 pass734 try:735 self.start_disconnect.destroy()736 except AttributeError:737 pass738 try:739 self.start_screenshot.destroy()740 except AttributeError:741 pass742 try:743 self.start_bluetooth.destroy()744 except AttributeError:745 pass746 try:747 self.stop_bluetooth.destroy()748 except AttributeError:749 pass750 try:751 self.start_wifi.destroy()752 except AttributeError:753 pass754 try:755 self.stop_wifi.destroy()756 except AttributeError:757 pass758 try:759 self.start_file_modification.destroy()760 except AttributeError:761 pass762 # Input Fields763 try:764 self.ip_addr.destroy()765 except AttributeError:766 pass767 try:768 self.json_file_name.destroy()769 except AttributeError:770 pass771 try:772 self.ip_addr_json.destroy()773 except AttributeError:774 pass775 try:776 self.download_file.destroy()777 except AttributeError:778 pass779 try:780 self.upload_file.destroy()781 except AttributeError:782 pass783 try:784 self.filename.destroy()785 except AttributeError:786 pass787 try:788 self.name_of_apk.destroy()789 except AttributeError:790 pass791 try:792 self.apk_package_name.destroy()793 except AttributeError:794 pass795 try:796 self.screenshot_file.destroy()797 except AttributeError:798 pass799 try:800 self.name_of_file.destroy()801 except AttributeError:802 pass803 try:804 self.new_content.destroy()805 except AttributeError:806 pass807 self.ip_addr = customtkinter.CTkEntry(master=self.frame_middle, width=400, placeholder_text="IP Address of the Android device")808 self.ip_addr.grid(row=6, column=1, pady=10, padx=20)809 def submit():810 reboot_output = getoutput(f'{adb} reboot {self.ip_addr.get()}')811 print(f"{INFO_CODE} {reboot_output}")812 self.droid_logs_lvl_7 = customtkinter.CTkLabel(master=self.frame_right, text=f"{INFO_CODE} {reboot_output}", corner_radius=6, fg_color=("white", "gray38"))813 self.droid_logs_lvl_7.grid(row=7, column=1, columnspan=5, rowspan=1, pady=5, padx=5, sticky="nsew")814 self.start_reboot = customtkinter.CTkButton(master=self.frame_middle, text="Submit", command=submit)815 self.start_reboot.grid(row=7, column=1, pady=10, padx=20)816 def btn_screenshot(self):817 # Buttons818 try:819 self.start_connect.destroy()820 except AttributeError:821 pass822 try:823 self.start_file_download.destroy()824 except AttributeError:825 pass826 try:827 self.start_file_upload.destroy()828 except AttributeError:829 pass830 try:831 self.start_apk_upload.destroy()832 except AttributeError:833 pass834 try:835 self.start_apk_remove.destroy()836 except AttributeError:837 pass838 try:839 self.start_disconnect.destroy()840 except AttributeError:841 pass842 try:843 self.start_reboot.destroy()844 except AttributeError:845 pass846 try:847 self.start_bluetooth.destroy()848 except AttributeError:849 pass850 try:851 self.stop_bluetooth.destroy()852 except AttributeError:853 pass854 try:855 self.start_wifi.destroy()856 except AttributeError:857 pass858 try:859 self.stop_wifi.destroy()860 except AttributeError:861 pass862 try:863 self.start_file_modification.destroy()864 except AttributeError:865 pass866 # Input Fields867 try:868 self.ip_addr.destroy()869 except AttributeError:870 pass871 try:872 self.json_file_name.destroy()873 except AttributeError:874 pass875 try:876 self.ip_addr_json.destroy()877 except AttributeError:878 pass879 try:880 self.download_file.destroy()881 except AttributeError:882 pass883 try:884 self.upload_file.destroy()885 except AttributeError:886 pass887 try:888 self.filename.destroy()889 except AttributeError:890 pass891 try:892 self.name_of_apk.destroy()893 except AttributeError:894 pass895 try:896 self.apk_package_name.destroy()897 except AttributeError:898 pass899 try:900 self.ip_addr.destroy()901 except AttributeError:902 pass903 try:904 self.name_of_file.destroy()905 except AttributeError:906 pass907 try:908 self.new_content.destroy()909 except AttributeError:910 pass911 self.screenshot_file = customtkinter.CTkEntry(master=self.frame_middle, width=400, placeholder_text="Filename (omit extension)")912 self.screenshot_file.grid(row=6, column=1, pady=10, padx=20)913 def submit():914 screenshot_output = getoutput(f"{adb} exec-out screencap -p > droid_{self.screenshot_file.get()}.png")915 print(f"{INFO_CODE} {screenshot_output}")916 self.droid_logs_lvl_8 = customtkinter.CTkLabel(master=self.frame_right, text=f"{INFO_CODE} {screenshot_output}", corner_radius=6, fg_color=("white", "gray38"))917 self.droid_logs_lvl_8.grid(row=8, column=1, columnspan=5, rowspan=1, pady=5, padx=5, sticky="nsew")918 self.start_screenshot = customtkinter.CTkButton(master=self.frame_middle, text="Submit", command=submit)919 self.start_screenshot.grid(row=7, column=1, pady=10, padx=20)920 def btn_bluetooth(self):921 # Buttons922 try:923 self.start_connect.destroy()924 except AttributeError:925 pass926 try:927 self.start_file_download.destroy()928 except AttributeError:929 pass930 try:931 self.start_file_upload.destroy()932 except AttributeError:933 pass934 try:935 self.start_apk_upload.destroy()936 except AttributeError:937 pass938 try:939 self.start_apk_remove.destroy()940 except AttributeError:941 pass942 try:943 self.start_disconnect.destroy()944 except AttributeError:945 pass946 try:947 self.start_reboot.destroy()948 except AttributeError:949 pass950 try:951 self.start_screenshot.destroy()952 except AttributeError:953 pass954 try:955 self.start_bluetooth.destroy()956 except AttributeError:957 pass958 try:959 self.stop_bluetooth.destroy()960 except AttributeError:961 pass962 try:963 self.start_wifi.destroy()964 except AttributeError:965 pass966 try:967 self.stop_wifi.destroy()968 except AttributeError:969 pass970 try:971 self.start_file_modification.destroy()972 except AttributeError:973 pass974 # Input Fields975 try:976 self.ip_addr.destroy()977 except AttributeError:978 pass979 try:980 self.json_file_name.destroy()981 except AttributeError:982 pass983 try:984 self.ip_addr_json.destroy()985 except AttributeError:986 pass987 try:988 self.upload_file.destroy()989 except AttributeError:990 pass991 try:992 self.filename.destroy()993 except AttributeError:994 pass995 try:996 self.name_of_apk.destroy()997 except AttributeError:998 pass999 try:1000 self.apk_package_name.destroy()1001 except AttributeError:1002 pass1003 try:1004 self.ip_addr.destroy()1005 except AttributeError:1006 pass1007 try:1008 self.screenshot_file.destroy()1009 except AttributeError:1010 pass1011 try:1012 self.name_of_file.destroy()1013 except AttributeError:1014 pass1015 try:1016 self.new_content.destroy()1017 except AttributeError:1018 pass1019 try:1020 self.download_file.destroy()1021 except AttributeError:1022 pass1023 def start_bluetooth():1024 # Restarts adb in root1025 root_output = getoutput(f'{adb} root')1026 # Starts bluetooth service1027 bluetooth_output = getoutput(f'{adb} shell service call bluetooth_manager 6')1028 print(f"{INFO_CODE} {root_output}")1029 print(f"{INFO_CODE} {bluetooth_output}")1030 self.droid_logs_lvl_9 = customtkinter.CTkLabel(master=self.frame_right, text=f"{INFO_CODE} {root_output}", corner_radius=6, fg_color=("white", "gray38"))1031 self.droid_logs_lvl_9.grid(row=9, column=1, columnspan=5, rowspan=1, pady=5, padx=5, sticky="nsew")1032 self.droid_logs_lvl_10 = customtkinter.CTkLabel(master=self.frame_right, text=f"{INFO_CODE} {bluetooth_output}", corner_radius=6, fg_color=("white", "gray38"))1033 self.droid_logs_lvl_10.grid(row=10, column=1, columnspan=5, rowspan=1, pady=5, padx=5, sticky="nsew")1034 1035 def stop_bluetooth():1036 # Restarts adb in root1037 root_output = getoutput(f'{adb} root')1038 # Stops bluetooth service1039 bluetooth_output = getoutput(f'{adb} shell service call bluetooth_manager 8')1040 print(f"{INFO_CODE} {root_output}")1041 print(f"{INFO_CODE} {bluetooth_output}")1042 self.droid_logs_lvl_11 = customtkinter.CTkLabel(master=self.frame_right, text=f"{INFO_CODE} {root_output}", corner_radius=6, fg_color=("white", "gray38"))1043 self.droid_logs_lvl_11.grid(row=11, column=1, columnspan=5, rowspan=1, pady=5, padx=5, sticky="nsew")1044 self.droid_logs_lvl_12 = customtkinter.CTkLabel(master=self.frame_right, text=f"{INFO_CODE} {bluetooth_output}", corner_radius=6, fg_color=("white", "gray38"))1045 self.droid_logs_lvl_12.grid(row=12, column=1, columnspan=5, rowspan=1, pady=5, padx=5, sticky="nsew")1046 1047 self.start_bluetooth = customtkinter.CTkButton(master=self.frame_middle, text="Start Bluetooth", command=start_bluetooth)1048 self.start_bluetooth.grid(row=1, column=0, pady=10, padx=20)1049 self.stop_bluetooth = customtkinter.CTkButton(master=self.frame_middle, text="Stop Bluetooth", command=stop_bluetooth)1050 self.stop_bluetooth.grid(row=2, column=0, pady=10, padx=20)1051 def btn_wifi(self):1052 # Buttons1053 try:1054 self.start_connect.destroy()1055 except AttributeError:1056 pass1057 try:1058 self.start_file_download.destroy()1059 except AttributeError:1060 pass1061 try:1062 self.start_file_upload.destroy()1063 except AttributeError:1064 pass1065 try:1066 self.start_apk_upload.destroy()1067 except AttributeError:1068 pass1069 try:1070 self.start_apk_remove.destroy()1071 except AttributeError:1072 pass1073 try:1074 self.start_disconnect.destroy()1075 except AttributeError:1076 pass1077 try:1078 self.start_reboot.destroy()1079 except AttributeError:1080 pass1081 try:1082 self.start_screenshot.destroy()1083 except AttributeError:1084 pass1085 try:1086 self.start_bluetooth.destroy()1087 except AttributeError:1088 pass1089 try:1090 self.stop_bluetooth.destroy()1091 except AttributeError:1092 pass1093 try:1094 self.start_file_modification.destroy()1095 except AttributeError:1096 pass1097 # Input Fields1098 try:1099 self.ip_addr.destroy()1100 except AttributeError:1101 pass1102 try:1103 self.json_file_name.destroy()1104 except AttributeError:1105 pass1106 try:1107 self.ip_addr_json.destroy()1108 except AttributeError:1109 pass1110 try:1111 self.upload_file.destroy()1112 except AttributeError:1113 pass1114 try:1115 self.filename.destroy()1116 except AttributeError:1117 pass1118 try:1119 self.name_of_apk.destroy()1120 except AttributeError:1121 pass1122 try:1123 self.apk_package_name.destroy()1124 except AttributeError:1125 pass1126 try:1127 self.ip_addr.destroy()1128 except AttributeError:1129 pass1130 try:1131 self.screenshot_file.destroy()1132 except AttributeError:1133 pass1134 try:1135 self.name_of_file.destroy()1136 except AttributeError:1137 pass1138 try:1139 self.new_content.destroy()1140 except AttributeError:1141 pass1142 try:1143 self.download_file.destroy()1144 except AttributeError:1145 pass1146 def start_wifi():1147 # Restarts adb in root1148 root_output = getoutput(f'{adb} root')1149 # Starts wifi service1150 wifi_output = getoutput(f"{adb} shell 'svc wifi enable'")1151 print(f"{INFO_CODE} {root_output}")1152 print(f"{INFO_CODE} {wifi_output}")1153 self.droid_logs_lvl_13 = customtkinter.CTkLabel(master=self.frame_right, text=f"{INFO_CODE} {root_output}", corner_radius=6, fg_color=("white", "gray38"))1154 self.droid_logs_lvl_13.grid(row=13, column=1, columnspan=5, rowspan=1, pady=5, padx=5, sticky="nsew")1155 self.droid_logs_lvl_14 = customtkinter.CTkLabel(master=self.frame_right, text=f"{INFO_CODE} {wifi_output}", corner_radius=6, fg_color=("white", "gray38"))1156 self.droid_logs_lvl_14.grid(row=14, column=1, columnspan=5, rowspan=1, pady=5, padx=5, sticky="nsew")1157 def stop_wifi():1158 # Restarts adb in root1159 root_output = getoutput(f'{adb} root')1160 # Stops wifi service1161 wifi_output = getoutput(f"{adb} shell 'svc wifi disable'")1162 print(f"{INFO_CODE} {root_output}")1163 print(f"{INFO_CODE} {wifi_output}")1164 self.droid_logs_lvl_15 = customtkinter.CTkLabel(master=self.frame_right, text=f"{INFO_CODE} {root_output}", corner_radius=6, fg_color=("white", "gray38"))1165 self.droid_logs_lvl_15.grid(row=15, column=1, columnspan=5, rowspan=1, pady=5, padx=5, sticky="nsew")1166 self.droid_logs_lvl_16 = customtkinter.CTkLabel(master=self.frame_right, text=f"{INFO_CODE} {wifi_output}", corner_radius=6, fg_color=("white", "gray38"))1167 self.droid_logs_lvl_16.grid(row=16, column=1, columnspan=5, rowspan=1, pady=5, padx=5, sticky="nsew")1168 self.start_wifi = customtkinter.CTkButton(master=self.frame_middle, text="Start Wifi", command=start_wifi)1169 self.start_wifi.grid(row=1, column=0, pady=10, padx=20)1170 self.stop_wifi = customtkinter.CTkButton(master=self.frame_middle, text="Stop Wifi", command=stop_wifi)1171 self.stop_wifi.grid(row=2, column=0, pady=10, padx=20)1172 def btn_modify_file(self):1173 # Buttons1174 try:1175 self.start_connect.destroy()1176 except AttributeError:1177 pass1178 try:1179 self.start_file_download.destroy()1180 except AttributeError:1181 pass1182 try:1183 self.start_file_upload.destroy()1184 except AttributeError:1185 pass1186 try:1187 self.start_apk_upload.destroy()1188 except AttributeError:1189 pass1190 try:1191 self.start_apk_remove.destroy()1192 except AttributeError:1193 pass1194 try:1195 self.start_disconnect.destroy()1196 except AttributeError:1197 pass1198 try:1199 self.start_reboot.destroy()1200 except AttributeError:1201 pass1202 try:1203 self.start_screenshot.destroy()1204 except AttributeError:1205 pass1206 try:1207 self.start_bluetooth.destroy()1208 except AttributeError:1209 pass1210 try:1211 self.stop_bluetooth.destroy()1212 except AttributeError:1213 pass1214 try:1215 self.start_wifi.destroy()1216 except AttributeError:1217 pass1218 try:1219 self.stop_wifi.destroy()1220 except AttributeError:1221 pass1222 # Input Fields1223 try:1224 self.ip_addr.destroy()1225 except AttributeError:1226 pass1227 try:1228 self.json_file_name.destroy()1229 except AttributeError:1230 pass1231 try:1232 self.ip_addr_json.destroy()1233 except AttributeError:1234 pass1235 try:1236 self.download_file.destroy()1237 except AttributeError:1238 pass1239 try:1240 self.upload_file.destroy()1241 except AttributeError:1242 pass1243 try:1244 self.filename.destroy()1245 except AttributeError:1246 pass1247 try:1248 self.name_of_apk.destroy()1249 except AttributeError:1250 pass1251 try:1252 self.apk_package_name.destroy()1253 except AttributeError:1254 pass1255 try:1256 self.ip_addr.destroy()1257 except AttributeError:1258 pass1259 try:1260 self.screenshot_file.destroy()1261 except AttributeError:1262 pass1263 1264 self.name_of_file = customtkinter.CTkEntry(master=self.frame_middle, width=400, placeholder_text="Name of the file to modify")1265 self.name_of_file.grid(row=6, column=1, pady=10, padx=20)1266 self.new_content = customtkinter.CTkEntry(master=self.frame_middle, width=400, placeholder_text="Content to add into the modified file")1267 self.new_content.grid(row=7, column=1, pady=10, padx=20)1268 def submit():1269 # Modifies a file without downloading the file1270 file_write_output = getoutput(f"{adb} shell 'echo '{self.new_content.get()}' > {self.name_of_file.get()}'")1271 print(f"{INFO_CODE} {file_write_output}")1272 self.droid_logs_lvl_17 = customtkinter.CTkLabel(master=self.frame_right, text=f"{INFO_CODE} {file_write_output}", corner_radius=6, fg_color=("white", "gray38"))1273 1274 self.droid_logs_lvl_17.grid(row=17, column=1, columnspan=5, rowspan=1, pady=5, padx=5, sticky="nsew")1275 self.start_file_modification = customtkinter.CTkButton(master=self.frame_middle, text="Submit", command=submit)1276 self.start_file_modification.grid(row=8, column=1, pady=10, padx=20)1277 1278 def btn_help(self):1279 msg = "\n \1280 Connect | Connects to the Android device\n \1281 Disconnect | Disconnects from the Android device\n \1282 Reboot | Remotely reboots the Android device\n \1283 Screenshot | Takes a screenshot of the current screen\n \1284 Download | Download a file from the Android device\n \1285 Upload | Upload a file to the Android device\n \1286 Remove APK | Remove an apk from the Android device\n \1287 Upload APK | Upload an apk to the Android device\n \1288 Bluetooth | Start/stop the Bluetooth service\n \1289 Wifi | Start/stop the Wifi service\n \1290 Close | Closes Droid and disconnects from Android device\n \1291 Modify | Modify a file on the Android device without downloading anything\n \1292 Help | This help menu\n \1293 "1294 print(msg)1295 messagebox.showinfo("Help Menu", "Check terminal for help menu")1296 def btn_destroy(self):1297 print("Exiting...")1298 time.sleep(1)...
RuntimeCompositor.py
Source:RuntimeCompositor.py
...118 self.env_layer.set_legacy_test_mode()119 self.env_layer.run_command_output = self.legacy_env_layer_extensions.run_command_output120 def reconfigure_reboot_manager(self):121 self.reboot_manager.start_reboot = self.start_reboot122 def start_reboot(self, message="Test initiated reboot mock"):123 self.status_handler.set_installation_reboot_status(Constants.RebootStatus.STARTED)124 def reconfigure_package_manager(self):125 self.backup_get_current_auto_os_patch_state = self.package_manager.get_current_auto_os_patch_state126 self.package_manager.get_current_auto_os_patch_state = self.get_current_auto_os_patch_state127 def mock_sleep(self, seconds):128 pass129 def check_sudo_status(self, raise_if_not_sudo=True):130 return True131 def get_current_auto_os_patch_state(self):132 return Constants.AutomaticOSPatchStates.DISABLED133 def mock_urlopen(self, url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, cafile=None, capath=None, cadefault=False, context=None):134 if self.vm_cloud_type == Constants.VMCloudType.AZURE:135 resp = urlreq.addinfourl(StringIO("mock file"), "mock message", "mockurl")136 resp.code = 200...
RebootManager.py
Source:RebootManager.py
...51 def is_setting(self, setting_to_check):52 return self.reboot_setting == setting_to_check53 # REBOOT ACTION54 # =============55 def start_reboot(self, message="Azure Patch Management initiated a reboot after a patch installation run."):56 """ Perform a system reboot """57 self.composite_logger.log("\nThe machine is set to reboot in " + self.minutes_to_shutdown + " minutes.")58 self.status_handler.set_installation_reboot_status(Constants.RebootStatus.STARTED)59 reboot_init_time = self.env_layer.datetime.datetime_utcnow()60 self.env_layer.reboot_machine(self.reboot_cmd + self.minutes_to_shutdown + ' ' + message)61 # Wait for timeout62 max_allowable_time_to_reboot_in_minutes = int(self.minutes_to_shutdown) + Constants.REBOOT_WAIT_TIMEOUT_IN_MINUTES63 while 1:64 current_time = self.env_layer.datetime.datetime_utcnow()65 elapsed_time_in_minutes = self.env_layer.datetime.total_minutes_from_time_delta(current_time - reboot_init_time)66 if elapsed_time_in_minutes >= max_allowable_time_to_reboot_in_minutes:67 self.status_handler.set_installation_reboot_status(Constants.RebootStatus.FAILED)68 error_msg = "Reboot failed to proceed on the machine in a timely manner."69 self.status_handler.add_error_to_status(error_msg, Constants.PatchOperationErrorCodes.DEFAULT_ERROR)70 raise Exception(error_msg, "[{0}]".format(Constants.ERROR_ADDED_TO_STATUS))71 else:72 self.composite_logger.file_logger.flush()73 self.composite_logger.log("Waiting for machine reboot. [ElapsedTimeInMinutes={0}] [MaxTimeInMinutes={1}]".format(str(elapsed_time_in_minutes), str(max_allowable_time_to_reboot_in_minutes)))74 self.composite_logger.file_logger.flush()75 time.sleep(60)76 def start_reboot_if_required_and_time_available(self, current_time_available):77 """ Starts a reboot if required. Happens only at the end of the run if required. """78 self.composite_logger.log("\nReboot Management")79 reboot_pending = False if not self.status_handler else self.status_handler.is_reboot_pending80 reboot_pending = self.package_manager.force_reboot or reboot_pending81 if self.package_manager.force_reboot:82 self.composite_logger.log("A reboot is pending as the package manager required it.")83 # return if never84 if self.reboot_setting == Constants.REBOOT_NEVER:85 if reboot_pending:86 self.composite_logger.log_warning(' - There is a reboot pending, but reboot is blocked, as per patch installation configuration. (' + str(Constants.REBOOT_NEVER) + ')')87 else:88 self.composite_logger.log_warning(' - There is no reboot pending, and reboot is blocked regardless, as per patch installation configuration (' + str(Constants.REBOOT_NEVER) + ').')89 return False90 # return if system doesn't require it (and only reboot if it does)91 if self.reboot_setting == Constants.REBOOT_IF_REQUIRED and not reboot_pending:92 self.composite_logger.log(" - There was no reboot pending detected. Reboot is being skipped as it's not required, as per patch installation configuration (" + str(Constants.REBOOT_IF_REQUIRED) + ").")93 return False94 # prevent repeated reboots95 if self.reboot_setting == Constants.REBOOT_ALWAYS and not reboot_pending and self.status_handler.get_installation_reboot_status() == Constants.RebootStatus.COMPLETED:96 self.composite_logger.log(" - At least one reboot has occurred, and there's no reboot pending, so the conditions for the 'Reboot Always' setting is fulfilled and reboot won't be repeated.")97 return False98 # attempt to reboot is enough time is available99 if self.reboot_setting == Constants.REBOOT_ALWAYS or (self.reboot_setting == Constants.REBOOT_IF_REQUIRED and reboot_pending):100 if self.is_reboot_time_available(current_time_available):101 self.composite_logger.log(' - Reboot is being scheduled, as per patch installation configuration (' + str(self.reboot_setting) + ').')102 self.composite_logger.log(" - Reboot-pending status: " + str(reboot_pending))103 self.start_reboot()104 return True105 else:106 error_msg = ' - There is not enough time to schedule a reboot as per patch installation configuration (' + str(self.reboot_setting) + '). Reboot-pending status: ' + str(reboot_pending)107 self.composite_logger.log_error(error_msg)108 self.status_handler.add_error_to_status("Reboot Management" + str(error_msg), Constants.PatchOperationErrorCodes.DEFAULT_ERROR)109 self.maintenance_window_exceeded_flag = True...
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!!