Last active
December 18, 2017 10:36
-
-
Save datakurre/7e9fcf66e542f345aa3e933bd3ea7e6a to your computer and use it in GitHub Desktop.
nix-shell for Plone buildout with Selenium tests
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env nix-shell | |
{ rev ? "beb1f1ea91ef15d5f1b272108b0cf964e47665f2" | |
, sha256 ? "02n73jmc0vbb2dq5af70zxms63jbgbnzc70fmw50mcq07fpwa3p9" | |
, pkgs ? import ((import <nixpkgs> {}).pkgs.fetchFromGitHub { | |
owner = "NixOS"; | |
repo = "nixpkgs"; | |
inherit rev; | |
inherit sha256; | |
}) {} | |
, pythonPackages ? pkgs.python27Packages | |
}: | |
with pkgs; | |
with pkgs.rustPlatform; | |
let self = rec { | |
geckodriver = buildRustPackage rec { | |
version = "0.18.0"; | |
name = "geckodriver-${version}"; | |
src = fetchurl { | |
url = "https://github.com/mozilla/geckodriver/archive/v0.18.0.tar.gz"; | |
sha256 = "1qlpdm24r80sf94sg4mg5wph4gc0fa2x9w8zxw2wl7bw0zvbp9d2"; | |
}; | |
depsSha256 = "1b1vwqnxqrlcxm4p7ykvn4xhl44017z9d8c5y5qs3f8jjxf7870z"; | |
}; | |
selenium = pythonPackages.selenium.overrideDerivation (old: rec { | |
pname = "selenium"; | |
version = "3.6.0"; | |
name = "${pname}-${version}"; | |
src = pkgs.fetchurl { | |
url = "mirror://pypi/${builtins.substring 0 1 pname}/${pname}/${name}.tar.gz"; | |
sha256 = "15qpvz0bdwjvpcj11fm0rw6r5inr66sqw89ww50l025sbhf04qwm"; | |
}; | |
patches = [ | |
(builtins.toFile "fix_profiledir_permissions.patch" '' | |
--- a/selenium/webdriver/firefox/firefox_profile.py 2016-01-13 11:32:42.000000000 +0200 | |
+++ b/selenium/webdriver/firefox/firefox_profile.py 2016-01-13 11:32:12.000000000 +0200 | |
@@ -77,6 +77,7 @@ | |
shutil.copytree(self.profile_dir, newprof, | |
ignore=shutil.ignore_patterns("parent.lock", "lock", ".parentlock")) | |
self.profile_dir = newprof | |
+ os.chmod(self.profile_dir, 0755) | |
self._read_existing_userjs(os.path.join(self.profile_dir, "user.js")) | |
self.extensionsDir = os.path.join(self.profile_dir, "extensions") | |
self.userPrefs = os.path.join(self.profile_dir, "user.js") | |
@@ -172,6 +172,6 @@ | |
for base, dirs, files in os.walk(self.path): | |
for fyle in files: | |
filename = os.path.join(base, fyle) | |
- zipped.write(filename, filename[path_root:]) | |
+ zipped.writestr(open(filename).read(), filename[path_root:]) | |
zipped.close() | |
return base64.b64encode(fp.getvalue()).decode('UTF-8') | |
--- a/selenium/webdriver/remote/webdriver.py 2016-01-13 11:32:42.000000000 +0200 | |
+++ b/selenium/webdriver/remote/webdriver.py 2016-01-13 11:32:12.000000000 +0200 | |
@@ -224,6 +224,18 @@ | |
else: | |
capabilities.update({'firefox_profile': browser_profile.encoded}) | |
+ try: | |
+ del capabilities['moz:firefoxOptions']['profile'] | |
+ except KeyError: | |
+ pass | |
+# import sys; import pdb | |
+# for attr in ('stdin', 'stdout', 'stderr'): | |
+# setattr(sys, attr, getattr(sys, '__%s__' % attr)) | |
+# pdb.set_trace() | |
+ try: | |
+ capabilities['moz:firefoxOptions']['prefs'] = {"dom.file.createInChild": True} | |
+ except KeyError: | |
+ pass | |
w3c_caps = _make_w3c_caps(capabilities) | |
parameters = {"capabilities": w3c_caps, | |
"desiredCapabilities": capabilities} | |
response = self.execute(Command.NEW_SESSION, parameters) | |
'') | |
]; | |
prePatch = '' | |
mkdir -p py | |
cp -R selenium py/selenium | |
''; | |
patchPhase = null; | |
postPatch = old.patchPhase; | |
propagatedBuildInputs = old.propagatedBuildInputs ++ [ | |
geckodriver | |
]; | |
}); | |
robotframework-seleniumlibrary = pythonPackages.robotframework-selenium2library.overrideDerivation(old: rec { | |
pname = "robotframework-seleniumlibrary"; | |
version = "3.0.0b1"; | |
name = "${pname}-${version}"; | |
src = pkgs.fetchurl { | |
url = "mirror://pypi/${builtins.substring 0 1 pname}/${pname}/${name}.tar.gz"; | |
sha256 = "b5449d0e0a44141c2216cdb68c4b7e12a9c2efcc4e2dda48c5c501eb3fdf3dc8"; | |
}; | |
propagatedBuildInputs = [ | |
selenium | |
pythonPackages.decorator | |
pythonPackages.docutils | |
pythonPackages.robotframework | |
]; | |
}); | |
robotframework-selenium2library = pythonPackages.robotframework-selenium2library.overrideDerivation(old: rec { | |
pname = "robotframework-selenium2library"; | |
version = "3.0.0b1"; | |
name = "${pname}-${version}"; | |
src = pkgs.fetchurl { | |
url = "mirror://pypi/${builtins.substring 0 1 pname}/${pname}/${name}.tar.gz"; | |
sha256 = "a6160fad98792530ef1dc3a0e8b7e1e5344f3aecef462f6262c268674a34b9a1"; | |
}; | |
propagatedBuildInputs = [ | |
robotframework-seleniumlibrary | |
]; | |
}); | |
dataflake-fakeldap = pythonPackages.buildPythonPackage rec { | |
pname = "dataflake.fakeldap"; | |
version = "1.0"; | |
name = "${pname}-${version}"; | |
src = pkgs.fetchurl { | |
url = "mirror://pypi/${builtins.substring 0 1 pname}/${pname}/${name}.tar.gz"; | |
sha256 = "521e1f302f2cebd8da39e06b429ec9630cc40622d06ff095606adb06091c85d2"; | |
}; | |
buildInputs = [ | |
pythonPackages.setuptools-git | |
]; | |
propagatedBuildInputs = [ | |
pythonPackages.ldap | |
]; | |
}; | |
buildout = pythonPackages.zc_buildout_nix.overrideDerivation (old: rec { | |
postInstall = ""; | |
propagatedBuildInputs = [ | |
robotframework-selenium2library | |
dataflake-fakeldap | |
pythonPackages.cryptography | |
pythonPackages.pillow | |
pythonPackages.ldap | |
pythonPackages.lxml | |
pythonPackages.kerberos | |
pythonPackages.python_magic | |
pythonPackages.watchdog | |
]; | |
}); | |
}; | |
in stdenv.mkDerivation rec { | |
name = "env"; | |
env = buildEnv { name = name; paths = buildInputs; }; | |
builder = builtins.toFile "builder.sh" '' | |
source $stdenv/setup; ln -s $env $out | |
''; | |
buildInputs = with self; [ | |
# firefox | |
phantomjs2 | |
buildout | |
(pythonFull.buildEnv.override { | |
extraLibs = buildout.propagatedNativeBuildInputs; | |
}) | |
]; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment