Skip to content

Commit e7b1aa9

Browse files
committed
added dynamic args
1 parent fb9c050 commit e7b1aa9

File tree

2 files changed

+46
-64
lines changed

2 files changed

+46
-64
lines changed

browserstack/local.py

Lines changed: 23 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -3,37 +3,42 @@
33
from browserstack.bserrors import BrowserStackLocalError
44

55
class Local:
6-
def __init__(self, key=None, binary_path=None):
7-
self.options = {
8-
'key': key,
9-
'logfile_flag': '-logFile',
10-
'logfile_path': os.path.join(os.getcwd(), 'local.log')
11-
}
12-
self.local_folder_path = None
13-
self.local_logfile_path = self.options['logfile_path']
6+
def __init__(self, key=os.environ['BROWSERSTACK_ACCESS_KEY'], binary_path=None):
7+
self.key = key
8+
self.options = None
9+
self.local_logfile_path = os.path.join(os.getcwd(), 'local.log')
1410

15-
def __xstr(self, obj):
16-
if obj is None:
17-
return ''
18-
return str(obj)
11+
def __xstr(self, key, value):
12+
if key is None:
13+
return ['']
14+
if str(value).lower() == "true":
15+
return ['-' + key]
16+
else:
17+
return ['-' + key, value]
1918

2019
def _generate_cmd(self):
21-
options_order = ['logfile_flag', 'logfile_path', 'folder_flag', 'key', 'folder_path', 'forcelocal', 'local_identifier', 'only', 'only_automate', 'proxy_host', 'proxy_port', 'proxy_user', 'proxy_pass', 'forceproxy', 'force', 'verbose', 'hosts']
22-
cmd = [self.__xstr(self.options.get(o)) for o in options_order if self.options.get(o) is not None]
23-
return [self.binary_path] + cmd
20+
cmd = [self.binary_path, '-logFile', self.local_logfile_path, self.key]
21+
for o in self.options.keys():
22+
if self.options.get(o) is not None:
23+
cmd = cmd + self.__xstr(o, self.options.get(o))
24+
return cmd
2425

2526
def start(self, **kwargs):
26-
for key, value in kwargs.items():
27-
self.__add_arg(key, value)
28-
27+
self.options = kwargs
28+
2929
if 'binarypath' in self.options:
3030
self.binary_path = binary_path
3131
else:
3232
self.binary_path = LocalBinary().get_binary()
3333

34+
if 'logfile' in self.options:
35+
self.local_logfile_path = self.options['logfile']
36+
del self.options['logfile']
37+
3438
if "onlyCommand" in kwargs and kwargs["onlyCommand"]:
3539
return
3640

41+
print self._generate_cmd()
3742
self.proc = subprocess.Popen(self._generate_cmd(), stdout=subprocess.PIPE)
3843
self.stderr = self.proc.stderr
3944

@@ -56,43 +61,6 @@ def isRunning(self):
5661
return True if self.proc.poll() is None else False
5762
return False
5863

59-
def __add_arg(self, key, value):
60-
if key == 'verbose' and value:
61-
self.options['verbose'] = '-v'
62-
elif key == 'force' and value:
63-
self.options['force'] = '-force'
64-
elif key == 'only' and value:
65-
self.options['only'] = '-only'
66-
elif key == 'onlyAutomate' and value:
67-
self.options['only_automate'] = '-onlyAutomate'
68-
elif key == 'forcelocal' and value:
69-
self.options['forcelocal'] = '-forcelocal'
70-
elif key == 'localIdentifier':
71-
self.options['local_identifier'] = '-localIdentifier ' + str(value)
72-
elif key == 'f':
73-
self.options['folder_flag'] = '-f'
74-
self.options['folder_path'] = str(value)
75-
elif key == 'proxyHost':
76-
self.options['proxy_host'] = '-proxyHost ' + str(value)
77-
elif key == 'proxyPort':
78-
self.options['proxy_port'] = '-proxyPort ' + str(value)
79-
elif key == 'proxyUser':
80-
self.options['proxy_user'] = '-proxyUser ' + str(value)
81-
elif key == 'proxyPass':
82-
self.options['proxy_pass'] = '-proxyPass ' + str(value)
83-
elif key == 'hosts':
84-
self.options['hosts'] = str(value)
85-
elif key == 'forceproxy' and value:
86-
self.options['forceproxy'] = '-forceproxy'
87-
elif key == 'logfile':
88-
self.options['logfile_flag'] = '-logFile'
89-
self.options['logfile'] = str(value)
90-
self.local_logfile_path = str(value)
91-
elif key == 'binarypath':
92-
self.options['binarypath'] = str(value)
93-
elif key != 'onlyCommand':
94-
raise BrowserStackLocalError('Attempted to pass invalid option to binary')
95-
9664
def stop(self):
9765
try:
9866
self.proc.terminate()

tests/test_local.py

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def test_start_local(self):
1313
self.assertNotEqual(self.local.proc.pid, 0)
1414

1515
def test_verbose(self):
16-
self.local.start(verbose=True, onlyCommand=True)
16+
self.local.start(v=True, onlyCommand=True)
1717
self.assertIn('-v', self.local._generate_cmd())
1818

1919
def test_local_folder(self):
@@ -33,23 +33,37 @@ def test_force_local(self):
3333
self.local.start(forcelocal=True, onlyCommand=True)
3434
self.assertIn('-forcelocal', self.local._generate_cmd())
3535

36+
def test_custom_boolean_argument(self):
37+
self.local.start(boolArg1=True, boolArg2=True, onlyCommand=True)
38+
self.assertIn('-boolArg1', self.local._generate_cmd())
39+
self.assertIn('-boolArg2', self.local._generate_cmd())
40+
41+
def test_custom_keyval(self):
42+
self.local.start(customKey1="custom value1", customKey2="custom value2", onlyCommand=True)
43+
self.assertIn('-customKey1', self.local._generate_cmd())
44+
self.assertIn('custom value1', self.local._generate_cmd())
45+
self.assertIn('-customKey2', self.local._generate_cmd())
46+
self.assertIn('custom value2', self.local._generate_cmd())
47+
3648
def test_proxy(self):
3749
self.local.start(proxyHost='localhost', proxyPort=2000, proxyUser='hello', proxyPass='test123', onlyCommand=True)
38-
self.assertIn('-proxyHost localhost', self.local._generate_cmd())
39-
self.assertIn('-proxyPort 2000', self.local._generate_cmd())
40-
self.assertIn('-proxyUser hello', self.local._generate_cmd())
41-
self.assertIn('-proxyPass test123', self.local._generate_cmd())
50+
self.assertIn('-proxyHost', self.local._generate_cmd())
51+
self.assertIn('localhost', self.local._generate_cmd())
52+
self.assertIn('-proxyPort', self.local._generate_cmd())
53+
self.assertIn(2000, self.local._generate_cmd())
54+
self.assertIn('-proxyUser', self.local._generate_cmd())
55+
self.assertIn('hello', self.local._generate_cmd())
56+
self.assertIn('-proxyPass', self.local._generate_cmd())
57+
self.assertIn('test123', self.local._generate_cmd())
4258

4359
def test_force_proxy(self):
4460
self.local.start(forceproxy=True, onlyCommand=True)
4561
self.assertIn('-forceproxy', self.local._generate_cmd())
4662

4763
def test_local_identifier(self):
4864
self.local.start(localIdentifier='mytunnel', onlyCommand=True)
49-
self.assertIn('-localIdentifier mytunnel', self.local._generate_cmd())
50-
51-
def test_invalid_option(self):
52-
self.assertRaises(BrowserStackLocalError, lambda: self.local.start(random=True))
65+
self.assertIn('-localIdentifier', self.local._generate_cmd())
66+
self.assertIn('mytunnel', self.local._generate_cmd())
5367

5468
def test_running(self):
5569
self.assertFalse(self.local.isRunning())

0 commit comments

Comments
 (0)