Skip to content

Commit

Permalink
optimize import to support both python2 and python3
Browse files Browse the repository at this point in the history
  • Loading branch information
yuanchun-li committed Jul 6, 2018
1 parent 7bca34d commit 716c548
Show file tree
Hide file tree
Showing 14 changed files with 49 additions and 76 deletions.
2 changes: 0 additions & 2 deletions droidbot/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +0,0 @@
import start
start = start.main
2 changes: 1 addition & 1 deletion droidbot/app.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import logging
import os
import hashlib
from intent import Intent
from .intent import Intent


class App(object):
Expand Down
26 changes: 13 additions & 13 deletions droidbot/device.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@
import sys
import time

from adapter.adb import ADB
from adapter.droidbot_app import DroidBotAppConn
from adapter.logcat import Logcat
from adapter.minicap import Minicap
from adapter.process_monitor import ProcessMonitor
from adapter.telnet import TelnetConsole
from adapter.user_input_monitor import UserInputMonitor
from adapter.droidbot_ime import DroidBotIme
from app import App
from intent import Intent
from .adapter.adb import ADB
from .adapter.droidbot_app import DroidBotAppConn
from .adapter.logcat import Logcat
from .adapter.minicap import Minicap
from .adapter.process_monitor import ProcessMonitor
from .adapter.telnet import TelnetConsole
from .adapter.user_input_monitor import UserInputMonitor
from .adapter.droidbot_ime import DroidBotIme
from .app import App
from .intent import Intent

DEFAULT_NUM = '1234567890'
DEFAULT_CONTENT = 'Hello world!'
Expand All @@ -37,8 +37,8 @@ def __init__(self, device_serial=None, is_emulator=False, output_dir=None,
self.logger = logging.getLogger(self.__class__.__name__)

if device_serial is None:
import utils
all_devices = utils.get_available_devices()
from .utils import get_available_devices
all_devices = get_available_devices()
if len(all_devices) == 0:
self.logger.warning("ERROR: No device connected.")
sys.exit(-1)
Expand Down Expand Up @@ -805,7 +805,7 @@ def get_current_state(self):
background_services = self.get_service_names()
screenshot_path = self.take_screenshot()
self.logger.debug("finish getting current device state...")
from device_state import DeviceState
from .device_state import DeviceState
current_state = DeviceState(self,
views=views,
foreground_activity=foreground_activity,
Expand Down
7 changes: 3 additions & 4 deletions droidbot/device_state.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,9 @@
import math
import os

import utils
from input_event import TouchEvent, LongTouchEvent, ScrollEvent, SetTextEvent
from .utils import md5
from .input_event import TouchEvent, LongTouchEvent, ScrollEvent, SetTextEvent

import xmlrpclib

class DeviceState(object):
"""
Expand Down Expand Up @@ -94,7 +93,7 @@ def __assign_depth(views, view_dict, depth):

def __get_state_str(self):
state_str_raw = self.__get_state_str_raw()
return utils.md5(state_str_raw)
return md5(state_str_raw)

def __get_state_str_raw(self):
view_signatures = set()
Expand Down
8 changes: 4 additions & 4 deletions droidbot/droidbot.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@
import shutil
from threading import Timer

from device import Device
from app import App
from env_manager import AppEnvManager
from input_manager import InputManager
from .device import Device
from .app import App
from .env_manager import AppEnvManager
from .input_manager import InputManager


class DroidBot(object):
Expand Down
4 changes: 2 additions & 2 deletions droidbot/droidmaster.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
import sys
from threading import Timer

from adapter.droidbot import DroidBotConn
from adapter.qemu import QEMUConn
from .adapter.droidbot import DroidBotConn
from .adapter.qemu import QEMUConn


class DroidMaster(object):
Expand Down
4 changes: 2 additions & 2 deletions droidbot/input_event.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
import time
from abc import abstractmethod

import utils
from intent import Intent
from . import utils
from .intent import Intent

POSSIBLE_KEYS = [
"BACK",
Expand Down
6 changes: 3 additions & 3 deletions droidbot/input_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import subprocess
import time

from input_event import EventLog
from input_policy import UtgBasedInputPolicy, UtgNaiveSearchPolicy, UtgGreedySearchPolicy, \
from .input_event import EventLog
from .input_policy import UtgBasedInputPolicy, UtgNaiveSearchPolicy, UtgGreedySearchPolicy, \
ManualPolicy, \
POLICY_NAIVE_DFS, POLICY_GREEDY_DFS, \
POLICY_NAIVE_BFS, POLICY_GREEDY_BFS, \
Expand Down Expand Up @@ -53,7 +53,7 @@ def __init__(self, device, app, policy_name, random_input,
if script_path is not None:
f = open(script_path, 'r')
script_dict = json.load(f)
from input_script import DroidBotScript
from .input_script import DroidBotScript
self.script = DroidBotScript(script_dict)

self.policy = self.get_input_policy(device, app, master)
Expand Down
12 changes: 8 additions & 4 deletions droidbot/input_policy.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import sys
import json
import logging
import random
import xmlrpclib
from abc import abstractmethod

from input_event import KeyEvent, IntentEvent, TouchEvent, ManualEvent
from utg import UTG
from .input_event import KeyEvent, IntentEvent, TouchEvent, ManualEvent
from .utg import UTG

# Max number of restarts
MAX_NUM_RESTARTS = 5
Expand Down Expand Up @@ -448,7 +448,11 @@ def generate_event_based_on_utg(self):
return IntentEvent(intent=stop_app_intent)

def __sort_inputs_by_humanoid(self, possible_events):
proxy = xmlrpclib.ServerProxy("http://%s:%s/" % tuple(self.device.humanoid.split(":")))
if sys.version.startswith("3"):
from xmlrpc.client import ServerProxy
else:
from xmlrpclib import ServerProxy
proxy = ServerProxy("http://%s:%s/" % tuple(self.device.humanoid.split(":")))
request_json = {
"history_view_trees": self.humanoid_view_trees,
"history_events": [x.__dict__ for x in self.humanoid_events],
Expand Down
4 changes: 2 additions & 2 deletions droidbot/input_script.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
import logging
import re

from input_event import InputEvent
from utils import safe_re_match
from .input_event import InputEvent
from .utils import safe_re_match

VIEW_ID = '<view_id>'
STATE_ID = '<state_id>'
Expand Down
10 changes: 5 additions & 5 deletions droidbot/start.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# helper file of droidbot
# it parses command arguments and send the options to droidbot
import argparse
import input_manager
import input_policy
import env_manager
from droidbot import DroidBot
from droidmaster import DroidMaster
from . import input_manager
from . import input_policy
from . import env_manager
from .droidbot import DroidBot
from .droidmaster import DroidMaster


def parse_args():
Expand Down
8 changes: 4 additions & 4 deletions droidbot/utg.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
import json
import os
import random
import utils
import datetime

import networkx as nx

from .utils import list_to_html_table


class UTG(object):
"""
Expand Down Expand Up @@ -96,7 +96,7 @@ def __output_utg(self):
activity_name = state.foreground_activity.split("/")[1]
short_activity_name = activity_name.split(".")[-1]

state_desc = utils.list_to_html_table([
state_desc = list_to_html_table([
("package", package_name),
("activity", activity_name),
("state_str", state.state_str),
Expand Down Expand Up @@ -153,7 +153,7 @@ def __output_utg(self):
"from": from_state,
"to": to_state,
"id": from_state + "-->" + to_state,
"title": utils.list_to_html_table(event_short_descs),
"title": list_to_html_table(event_short_descs),
"label": ", ".join([str(x["event_id"]) for x in event_list]),
"events": event_list
}
Expand Down
25 changes: 0 additions & 25 deletions droidbot/utils.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import re
import signal
from datetime import datetime

# logcat regex, which will match the log message generated by `adb logcat -v threadtime`
Expand Down Expand Up @@ -48,23 +47,6 @@ def get_available_devices():
return devices


class Timeout:
def __init__(self, seconds=0, error_message='Timeout'):
self.seconds = seconds
self.error_message = error_message

def handle_timeout(self, signum, frame):
raise TimeoutException()

def __enter__(self):
if self.seconds != 0:
signal.signal(signal.SIGALRM, self.handle_timeout)
signal.alarm(self.seconds)

def __exit__(self, type, value, traceback):
signal.alarm(0)


def weighted_choice(choices):
import random
total = sum(choices[c] for c in list(choices.keys()))
Expand Down Expand Up @@ -94,10 +76,3 @@ def list_to_html_table(dict_data):
def md5(input_str):
import hashlib
return hashlib.md5(input_str.encode('utf-8')).hexdigest()


class TimeoutException(Exception):
"""
Exception if connection has been waiting too long
"""
pass
7 changes: 2 additions & 5 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
# set up basic requirements for droidbot
__author__ = 'liyc'

from setuptools import setup, find_packages, findall
import os

setup(
name='droidbot',
packages=find_packages(exclude=['droidbot.tests', 'resources',
'droidbot_out', 'evaluation_reports']),
packages=find_packages(include=['droidbot', 'droidbot.adapter']),
# this must be the same as the name above
version='1.0.2b4',
description='A lightweight UI-guided test input generator for Android.',
Expand Down Expand Up @@ -37,7 +34,7 @@
],
entry_points={
'console_scripts': [
'droidbot=droidbot:start',
'droidbot=droidbot.start:main',
],
},
package_data={
Expand Down

0 comments on commit 716c548

Please sign in to comment.