Skip to content

Commit 5e95d78

Browse files
authored
Merge pull request #42 from browserstack/LOC_3647_language_bindings
Loc 3647 language bindings
2 parents 6467826 + 3563d69 commit 5e95d78

File tree

3 files changed

+49
-7
lines changed

3 files changed

+49
-7
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,5 @@ local.log
44
dist/**
55
MANIFEST
66

7+
build
8+
browserstack_local.egg-info

browserstack/local.py

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22
from browserstack.local_binary import LocalBinary
33
from browserstack.bserrors import BrowserStackLocalError
44

5+
try:
6+
from importlib.metadata import version as package_version, PackageNotFoundError
7+
except:
8+
import pkg_resources
9+
10+
511
class Local:
612
def __init__(self, key=None, binary_path=None, **kwargs):
713
self.key = os.environ['BROWSERSTACK_ACCESS_KEY'] if 'BROWSERSTACK_ACCESS_KEY' in os.environ else key
@@ -18,8 +24,30 @@ def __xstr(self, key, value):
1824
else:
1925
return ['-' + key, value]
2026

27+
def get_package_version(self):
28+
name = "browserstack-local"
29+
version = 'None'
30+
use_fallback = False
31+
try:
32+
temp = package_version
33+
except NameError: # Only catch if package_version is not defined(and not other errors)
34+
use_fallback = True
35+
36+
if use_fallback:
37+
try:
38+
version = pkg_resources.get_distribution(name).version
39+
except pkg_resources.DistributionNotFound:
40+
version = 'None'
41+
else:
42+
try:
43+
version = package_version(name)
44+
except PackageNotFoundError:
45+
version = 'None'
46+
47+
return version
48+
2149
def _generate_cmd(self):
22-
cmd = [self.binary_path, '-d', 'start', '-logFile', self.local_logfile_path, "-k", self.key]
50+
cmd = [self.binary_path, '-d', 'start', '-logFile', self.local_logfile_path, "-k", self.key, '--source', 'python:' + self.get_package_version()]
2351
for o in self.options.keys():
2452
if self.options.get(o) is not None:
2553
cmd = cmd + self.__xstr(o, self.options.get(o))
@@ -51,6 +79,9 @@ def start(self, **kwargs):
5179
if "onlyCommand" in kwargs and kwargs["onlyCommand"]:
5280
return
5381

82+
if 'source' in self.options:
83+
del self.options['source']
84+
5485
self.proc = subprocess.Popen(self._generate_cmd(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
5586
(out, err) = self.proc.communicate()
5687

browserstack/local_binary.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import platform, os, sys, zipfile, stat, tempfile, re, subprocess
1+
import platform, os, sys, stat, tempfile, re, subprocess
22
from browserstack.bserrors import BrowserStackLocalError
33

44
try:
@@ -12,15 +12,18 @@ def __init__(self):
1212
self.is_windows = False
1313
osname = platform.system()
1414
if osname == 'Darwin':
15-
self.http_path = "https://s3.amazonaws.com/browserStack/browserstack-local/BrowserStackLocal-darwin-x64"
15+
self.http_path = "https://bstack-local-prod.s3.amazonaws.com/BrowserStackLocal-darwin-x64"
1616
elif osname == 'Linux':
17-
if is_64bits:
18-
self.http_path = "https://s3.amazonaws.com/browserStack/browserstack-local/BrowserStackLocal-linux-x64"
17+
if self.is_alpine():
18+
self.http_path = "https://bstack-local-prod.s3.amazonaws.com/BrowserStackLocal-alpine"
1919
else:
20-
self.http_path = "https://s3.amazonaws.com/browserStack/browserstack-local/BrowserStackLocal-linux-ia32"
20+
if is_64bits:
21+
self.http_path = "https://bstack-local-prod.s3.amazonaws.com/BrowserStackLocal-linux-x64"
22+
else:
23+
self.http_path = "https://bstack-local-prod.s3.amazonaws.com/BrowserStackLocal-linux-ia32"
2124
else:
2225
self.is_windows = True
23-
self.http_path = "https://s3.amazonaws.com/browserStack/browserstack-local/BrowserStackLocal.exe"
26+
self.http_path = "https://bstack-local-prod.s3.amazonaws.com/BrowserStackLocal.exe"
2427

2528
self.ordered_paths = [
2629
os.path.join(os.path.expanduser('~'), '.browserstack'),
@@ -29,6 +32,12 @@ def __init__(self):
2932
]
3033
self.path_index = 0
3134

35+
def is_alpine(self):
36+
grepOutput = subprocess.run("gfrep -w NAME /etc/os-release", capture_output=True, shell=True)
37+
if grepOutput.stdout.decode('utf-8').find('Alpine') > -1:
38+
return True
39+
return False
40+
3241
def __make_path(self, dest_path):
3342
try:
3443
if not os.path.exists(dest_path):

0 commit comments

Comments
 (0)