How to use install_or_upgrade method in Airtest

Best Python code snippet using Airtest

component.py

Source:component.py Github

copy

Full Screen

1"""View for single component."""2import componentstore.resources.html as load3from componentstore.functions.data import get_data, migration_needed4from componentstore.const import EXAMPLE, DEMO5async def view(component):6 """View for single component."""7 content = load.RELOADICON.format('/reloadinstalled')8 data = await component_data(component)9 meta = {}10 meta['attention'] = data.get('attention')11 meta['author'] = ''12 meta['cardbuttons'] = ''13 meta['cardcontent'] = ''14 meta['cardtitle'] = ''15 meta['name'] = component16 meta['description'] = data.get('description')17 meta['long_description'] = data.get('long_description')18 meta['image'] = ''19 meta['install_or_upgrade'] = 'install'20 meta['update'] = ''21 meta['warning'] = ''22 if data:23 buttons = {}24 buttons['1'] = ''25 buttons['2'] = ''26 buttons['3'] = ''27 buttons['4'] = ''28 buttons['5'] = ''29 buttons['6'] = ''30 if data['installed']:31 buttons['1'] = load.LINK.format(32 url='/component/'+meta['name'], target='_self',33 style='', id='1', htmlclass='', extra='',34 text='CHECK FOR UPDATE')35 buttons['6'] = load.LINK.format(36 url='/component/'+meta['name']+'/uninstall', target='_self',37 style='', id='4', htmlclass='uninstall', extra='',38 text='UNINSTALL')39 else:40 buttons['1'] = load.LINK.format(41 url='#', target='_self',42 style='', id='installbtn', htmlclass='', extra='',43 text=meta['install_or_upgrade'])44 if data['has_update']:45 meta['cardtitle'] += load.UPDATEICON46 meta['install_or_upgrade'] = 'upgrade'47 buttons['1'] = load.LINK.format(48 url='#', target='_self',49 style='', id='installbtn', htmlclass='', extra='',50 text=meta['install_or_upgrade'])51 buttons['4'] = load.LINK.format(52 url=data['changelog'], target='_blank',53 style='', id='3', htmlclass='', extra='', text='CHANGELOG')54 if data.get('author'):55 link = load.LINK.format(56 url=data['author'].get('html_url'), target='_blank',57 style='', id='3', htmlclass='', extra='',58 text='@'+data['author'].get('login'))59 meta['author'] = load.TEXT.format('Author: '+link)60 buttons['3'] = load.LINK.format(61 url=data['visit_repo'], target='_blank',62 style='', id='2', htmlclass='', extra='', text='REPOSITORY')63 meta['cardtitle'] += meta['name']64 meta['cardtitle'] += load.CARD_MENU.format(65 repo=data['visit_repo'], component=meta['name'])66 needs_migration = await migration_needed(component)67 if needs_migration:68 meta['warning'] = load.TOOLTIP.format('Migration needed')69 domain = component.split('.')[0]70 platform = component.split('.')[1]71 meta['attention'] = "You have this installed with the old format."72 meta['attention'] += load.BREAK73 meta['attention'] += "You need to move (migrate) it to an embedded platform."74 meta['attention'] += load.BREAK75 meta['attention'] += load.BREAK76 option1 = "Option 1: Change the location of the platform"77 option1 += load.BREAK78 option1 += "from: custom_components/{domain}/{platform}.py".format(79 domain=domain, platform=platform)80 option1 += load.BREAK81 option1 += "to: 'custom_components/{platform}/{domain}.py'".format(82 domain=domain, platform=platform)83 option1 += load.BREAK84 meta['attention'] += load.TEXT.format(option1)85 if data['embedded']:86 meta['attention'] += load.TEXT.format(87 "Option 2: Delete the file and reinstall with this site.")88 meta['attention'] += load.BREAK89 meta['attention'] += load.TEXT.format(90 "Option 3: Click the 'MIGRATE' button.")91 if DEMO:92 buttons['2'] = load.LINK.format(93 url='#', target='_self', style='', id='installbtn',94 htmlclass='', extra='', text='MIGRATE')95 else:96 buttons['2'] = load.LINK.format(97 url='/component/'+component+'/migrate', target='_self',98 style='', id='2', htmlclass='', extra='',99 text='MIGRATE')100 if not data['embedded']:101 meta['attention'] = "This can not be installed/used with this site yet."102 meta['attention'] += load.BREAK103 meta['attention'] += "The developer of this must first migrate "104 meta['attention'] += "it to an embedded platform."105 if meta['attention']:106 buttons['1'] = ''107 buttons['4'] = ''108 meta['attention'] = load.ATTENTION.format(meta['attention'])109 else:110 meta['attention'] = ''111 if meta['description']:112 meta['cardcontent'] += load.TEXT.format(meta['description'])113 meta['cardcontent'] += load.BREAK114 if meta['attention']:115 meta['cardcontent'] += meta['attention']116 meta['cardcontent'] += load.BREAK117 if data['image_link']:118 meta['image'] = load.IMAGE.format(data['image_link'])119 meta['cardcontent'] += meta['image']120 meta['cardcontent'] += load.BREAK121 meta['cardcontent'] += load.BREAK122 if meta['long_description']:123 meta['cardcontent'] += load.TEXT.format(meta['long_description'])124 meta['cardcontent'] += load.BREAK125 if meta['author']:126 meta['cardcontent'] += load.TEXT.format(meta['author'])127 if data['local_version']:128 text = "Installed version: {}".format(data['local_version'])129 meta['cardcontent'] += load.TEXT.format(text)130 if data['version']:131 text = "Published version: {}".format(data['version'])132 meta['cardcontent'] += load.TEXT.format(text)133 if component == 'sensor.example':134 buttons['1'] = ''135 if DEMO and data['installed']:136 buttons['6'] = load.LINK.format(137 url='#', target='_self',138 style='', id='uninstallbtn', htmlclass='uninstall', extra='',139 text='uninstall')140 meta['cardbuttons'] += buttons['1']141 meta['cardbuttons'] += buttons['2']142 meta['cardbuttons'] += buttons['3']143 meta['cardbuttons'] += buttons['4']144 meta['cardbuttons'] += buttons['5']145 meta['cardbuttons'] += buttons['6']146 content += load.BUTTON_CARD.format(147 title=meta['cardtitle'],148 content=meta['cardcontent'],149 buttons=meta['cardbuttons'])150 if DEMO:151 content += load.DEMO_MODAL152 else:153 content += load.MODAL.format(154 component=meta['name'], type=meta['install_or_upgrade'],155 text=meta['install_or_upgrade'].upper())156 content += load.MODAL_SCRIPT157 else:158 content = load.NO_TITLE_CARD.format(159 'Component '+meta['name']+' not found')160 html = load.TOP161 html += load.BASE.format(content)162 html += load.END163 return html164async def component_data(component):165 """Return component data."""166 data = {}167 if component == 'sensor.example':168 component = EXAMPLE['sensor.example']169 else:170 component = await get_data(component=component)171 try:172 data['author'] = component.get('author')173 data['attention'] = component.get('attention')174 data['embedded'] = component.get('embedded')175 data['changelog'] = component.get('changelog')176 data['description'] = component.get('description')177 data['long_description'] = component.get('long_description')178 data['has_update'] = component.get('has_update')179 data['image_link'] = component.get('image_link')180 data['installed'] = component.get('installed')181 data['local_version'] = component.get('local_version')182 data['version'] = component.get('version')183 data['visit_repo'] = component.get('visit_repo')184 except Exception: # pylint: disable=W0703185 pass...

Full Screen

Full Screen

recorder.py

Source:recorder.py Github

copy

Full Screen

1# -*- coding: utf-8 -*-2import re3import six4from airtest.core.android.yosemite import Yosemite5from airtest.core.android.constant import YOSEMITE_PACKAGE6from airtest.core.error import AirtestError7from airtest.utils.logger import get_logger8from airtest.utils.nbsp import NonBlockingStreamReader9from airtest.utils.snippet import on_method_ready10LOGGING = get_logger(__name__)11class Recorder(Yosemite):12 """Screen recorder"""13 def __init__(self, adb):14 super(Recorder, self).__init__(adb)15 self.recording_proc = None16 self.recording_file = None17 @on_method_ready('install_or_upgrade')18 def start_recording(self, max_time=1800, bit_rate=None, vertical=None):19 """20 Start screen recording21 Args:22 max_time: maximum rate value, default is 180023 bit_rate: bit rate value, default is None24 vertical: vertical parameters, default is None25 Raises:26 RuntimeError: if any error occurs while setup the recording27 Returns:28 None if recording did not start, otherwise True29 """30 if getattr(self, "recording_proc", None):31 raise AirtestError("recording_proc has already started")32 pkg_path = self.adb.path_app(YOSEMITE_PACKAGE)33 max_time_param = "-Dduration=%d" % max_time if max_time else ""34 bit_rate_param = "-Dbitrate=%d" % bit_rate if bit_rate else ""35 if vertical is None:36 vertical_param = ""37 else:38 vertical_param = "-Dvertical=true" if vertical else "-Dvertical=false"39 p = self.adb.start_shell('CLASSPATH=%s exec app_process %s %s %s /system/bin %s.Recorder --start-record' %40 (pkg_path, max_time_param, bit_rate_param, vertical_param, YOSEMITE_PACKAGE))41 nbsp = NonBlockingStreamReader(p.stdout)42 while True:43 line = nbsp.readline(timeout=5)44 if line is None:45 raise RuntimeError("start recording error")46 if six.PY3:47 line = line.decode("utf-8")48 m = re.match("start result: Record start success! File path:(.*\.mp4)", line.strip())49 if m:50 output = m.group(1)51 self.recording_proc = p52 self.recording_file = output53 return True54 @on_method_ready('install_or_upgrade')55 def stop_recording(self, output="screen.mp4", is_interrupted=False):56 """57 Stop screen recording58 Args:59 output: default file is `screen.mp4`60 is_interrupted: True or False. Stop only, no pulling recorded file from device.61 Raises:62 AirtestError: if recording was not started before63 Returns:64 None65 """66 pkg_path = self.adb.path_app(YOSEMITE_PACKAGE)67 p = self.adb.start_shell('CLASSPATH=%s exec app_process /system/bin %s.Recorder --stop-record' % (pkg_path, YOSEMITE_PACKAGE))68 p.wait()69 self.recording_proc = None70 if is_interrupted:71 return72 for line in p.stdout.readlines():73 if line is None:74 break75 if six.PY3:76 line = line.decode("utf-8")77 m = re.match("stop result: Stop ok! File path:(.*\.mp4)", line.strip())78 if m:79 self.recording_file = m.group(1)80 self.adb.pull(self.recording_file, output)81 return True82 raise AirtestError("start_recording first")83 @on_method_ready('install_or_upgrade')84 def pull_last_recording_file(self, output='screen.mp4'):85 """86 Pull the latest recording file from device. Error raises if no recording files on device.87 Args:88 output: default file is `screen.mp4`89 """90 recording_file = 'mnt/sdcard/test.mp4'...

Full Screen

Full Screen

packagemanager.py

Source:packagemanager.py Github

copy

Full Screen

2import logging3import json4import os5log = logging.getLogger('dlmclient')6def install_or_upgrade(package=''):7 """install the given package."""8 cmd = 'opkg install %s' %(package)9 try:10 ret = subprocess.check_call(cmd, shell=True)11 except subprocess.CalledProcessError as err:12 log.error('error installing package: "%s":%s' %(package, err))13 ret = 114 return ret15def update():16 """install the given package."""17 cmd = 'opkg update'18 try:19 ret = subprocess.check_call(cmd, shell=True)20 except subprocess.CalledProcessError as err:21 log.error('error updating package list: :%s' %(err))22 ret = 123 return ret24def run_maintenance(upgrade_packages):25 """Do package maintenance by """26 # update package list27 update()28 # install / upgrade packages from the file29 for pkg in upgrade_packages:30 install_or_upgrade(pkg)...

Full Screen

Full Screen

Automation Testing Tutorials

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

LambdaTest Learning Hubs:

YouTube

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

Run Airtest automation tests on LambdaTest cloud grid

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

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful