1
+ from ast import Try
2
+ from re import T
1
3
import subprocess , os , time , json , psutil
2
4
from browserstack .local_binary import LocalBinary
3
5
from browserstack .bserrors import BrowserStackLocalError
4
6
7
+ try :
8
+ from importlib .metadata import version as package_version , PackageNotFoundError
9
+ except :
10
+ import pkg_resources
11
+
12
+
5
13
class Local :
6
14
def __init__ (self , key = None , binary_path = None , ** kwargs ):
7
15
self .key = os .environ ['BROWSERSTACK_ACCESS_KEY' ] if 'BROWSERSTACK_ACCESS_KEY' in os .environ else key
@@ -18,8 +26,30 @@ def __xstr(self, key, value):
18
26
else :
19
27
return ['-' + key , value ]
20
28
29
+ def get_package_version (self ):
30
+ name = "browserstack-local"
31
+ version = 'None'
32
+ use_fallback = False
33
+ try :
34
+ temp = package_version
35
+ except NameError : # Only catch if package_version is not defined(and not other errors)
36
+ use_fallback = True
37
+
38
+ if use_fallback :
39
+ try :
40
+ version = pkg_resources .get_distribution (name ).version
41
+ except pkg_resources .DistributionNotFound :
42
+ version = 'None'
43
+ else :
44
+ try :
45
+ version = package_version (name )
46
+ except PackageNotFoundError :
47
+ version = 'None'
48
+
49
+ return version
50
+
21
51
def _generate_cmd (self ):
22
- cmd = [self .binary_path , '-d' , 'start' , '-logFile' , self .local_logfile_path , "-k" , self .key ]
52
+ cmd = [self .binary_path , '-d' , 'start' , '-logFile' , self .local_logfile_path , "-k" , self .key , '--source' , 'python:' + self . get_package_version () ]
23
53
for o in self .options .keys ():
24
54
if self .options .get (o ) is not None :
25
55
cmd = cmd + self .__xstr (o , self .options .get (o ))
@@ -51,6 +81,9 @@ def start(self, **kwargs):
51
81
if "onlyCommand" in kwargs and kwargs ["onlyCommand" ]:
52
82
return
53
83
84
+ if 'source' in self .options :
85
+ del self .options ['source' ]
86
+
54
87
self .proc = subprocess .Popen (self ._generate_cmd (), stdout = subprocess .PIPE , stderr = subprocess .PIPE )
55
88
(out , err ) = self .proc .communicate ()
56
89
0 commit comments