1# This Source Code Form is subject to the terms of the Mozilla Public
2# License, v. 2.0. If a copy of the MPL was not distributed with this
3# file, You can obtain one at http://mozilla.org/MPL/2.0/.
4""" Collects visualmetrics dependencies.
5"""
6import os
7import subprocess
8import sys
9import time
10import contextlib
11from distutils.spawn import find_executable
12
13from mozperftest.utils import host_platform
14
15
16_PILLOW_VERSION = "7.2.0"
17_PYSSIM_VERSION = "0.4"
18
19
20def _start_xvfb():
21    old_display = os.environ.get("DISPLAY")
22    xvfb = find_executable("Xvfb")
23    if xvfb is None:
24        raise FileNotFoundError("Xvfb")
25    cmd = [xvfb, ":99"]
26    proc = subprocess.Popen(
27        cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, close_fds=True
28    )
29    os.environ["DISPLAY"] = ":99"
30    time.sleep(0.2)
31    return proc, old_display
32
33
34def _stop_xvfb(proc, old_display):
35    proc, old_display
36    if old_display is None:
37        del os.environ["DISPLAY"]
38    else:
39        os.environ["DISPLAY"] = old_display
40    if proc is not None:
41        try:
42            proc.terminate()
43            proc.wait()
44        except OSError:
45            pass
46
47
48@contextlib.contextmanager
49def xvfb():
50    proc, old_display = _start_xvfb()
51    try:
52        yield
53    finally:
54        _stop_xvfb(proc, old_display)
55
56
57def get_plat():
58    return host_platform(), f"{sys.version_info.major}.{sys.version_info.minor}"
59
60
61NUMPY = {
62    ("linux64", "3.8",): (
63        "41/6e/919522a6e1d067ddb5959c5716a659a05719e2f27487695d2a539b51d66e/"
64        "numpy-1.19.2-cp38-cp38-manylinux1_x86_64.whl"
65    ),
66    ("linux64", "3.7",): (
67        "d6/2e/a2dbcff6f46bb65645d18538d67183a1cf56b006ba96a12575c282a976bc/"
68        "numpy-1.19.2-cp37-cp37m-manylinux1_x86_64.whl"
69    ),
70    ("linux64", "3.6",): (
71        "b8/e5/a64ef44a85397ba3c377f6be9c02f3cb3e18023f8c89850dd319e7945521/"
72        "numpy-1.19.2-cp36-cp36m-manylinux1_x86_64.whl"
73    ),
74    ("darwin", "3.8",): (
75        "33/1a/d10d1c23d21c289a3e87e751a9daf0907e91665cab08d0c35033fd4f5b55/"
76        "numpy-1.19.2-cp38-cp38-macosx_10_9_x86_64.whl"
77    ),
78    ("darwin", "3.7",): (
79        "c1/a9/f04a5b7db30cc30b41fe516b8914c5049264490a34a49d977937606fbb23/"
80        "numpy-1.19.2-cp37-cp37m-macosx_10_9_x86_64.whl"
81    ),
82    ("darwin", "3.6",): (
83        "be/8e/800113bd3a0c9195b24574b8922ad92be96278028833c389b69a8b14f657/"
84        "numpy-1.19.2-cp36-cp36m-macosx_10_9_x86_64.whl"
85    ),
86    ("win64", "3.6",): (
87        "dc/8e/a78d4e4a28adadbf693a9c056a0d5955a906889fa0dc3768b88deb236e22/"
88        "numpy-1.19.2-cp36-cp36m-win_amd64.whl"
89    ),
90    ("win64", "3.7",): (
91        "82/4e/61764556b7ec13f5bd441b04530e2f9f11bb164308ef0e6951919bb846cb/"
92        "numpy-1.19.2-cp37-cp37m-win_amd64.whl"
93    ),
94    ("win64", "3.8"): (
95        "69/89/d8fc61a51ded540bd4b8859510b4ae44a0762c8b61dd81eb2c36f5e853ef/"
96        "numpy-1.19.2-cp38-cp38-win_amd64.whl"
97    ),
98    ("win64", "3.9"): (
99        "cc/bd/5779abe299afb562cdd434e8229a69a71802cc131ea6d811a8bf05937745/"
100        "numpy-1.20.0-cp39-cp39-win_amd64.whl"
101    ),
102}
103
104
105SCIPY = {
106    ("darwin", "3.8",): (
107        "8a/84/568ec7727bc789a9b623ec2652043ad3311d7939f152e81cb5d699bfb9b1"
108        "/scipy-1.5.2-cp38-cp38-macosx_10_9_x86_64.whl"
109    ),
110    ("darwin", "3.7",): (
111        "bc/47/e71e7f198a0b547fe861520a0240e3171256822dae81fcc97a36b772303e"
112        "/scipy-1.5.2-cp37-cp37m-macosx_10_9_x86_64.whl"
113    ),
114    ("darwin", "3.6",): (
115        "00/c0/ddf03baa7ee2a3540d8fbab0fecff7cdd0595dffd91cda746caa95cb686d"
116        "/scipy-1.5.2-cp36-cp36m-macosx_10_9_x86_64.whl"
117    ),
118    ("linux64", "3.8",): (
119        "8f/be/8625045311a3ed58af5f7ca8a51f20b1bbf72e288d34b48cc81cca550166"
120        "/scipy-1.5.2-cp38-cp38-manylinux1_x86_64.whl"
121    ),
122    ("linux64", "3.7",): (
123        "65/f9/f7a7e5009711579c72da2725174825e5056741bf4001815d097eef1b2e17"
124        "/scipy-1.5.2-cp37-cp37m-manylinux1_x86_64.whl"
125    ),
126    ("linux64", "3.6",): (
127        "2b/a8/f4c66eb529bb252d50e83dbf2909c6502e2f857550f22571ed8556f62d95"
128        "/scipy-1.5.2-cp36-cp36m-manylinux1_x86_64.whl"
129    ),
130    ("win64", "3.6",): (
131        "fc/f6/3d455f8b376a0faf1081dbba38bbd594c074292bdec08feaac589f53bc06/"
132        "numpy-1.19.2-cp36-cp36m-win_amd64.whl"
133    ),
134    ("win64", "3.7",): (
135        "66/80/d8a5050df5b4d8229e018f3222fe603ce7f92c026b78f4e05d69c3a6c43b/"
136        "numpy-1.19.2-cp37-cp37m-win_amd64.whl"
137    ),
138    ("win64", "3.8"): (
139        "9e/66/57d6cfa52dacd9a57d0289f8b8a614b2b4f9c401c2ac154d6b31ed8257d6/"
140        "numpy-1.19.2-cp38-cp38-win_amd64.whl"
141    ),
142    ("win64", "3.9"): (
143        "a5/6c/30c838130f75f3aaf65fdf72cc357967d7d2b569bf52c7eb788e6f1eb8c3/"
144        "scipy-1.5.4-cp39-cp39-win_amd64.whl"
145    ),
146}
147
148
149def get_dependencies():
150    return (
151        "https://files.pythonhosted.org/packages/" + NUMPY[get_plat()],
152        "https://files.pythonhosted.org/packages/" + SCIPY[get_plat()],
153        "Pillow==%s" % _PILLOW_VERSION,
154        "pyssim==%s" % _PYSSIM_VERSION,
155        "influxdb==5.3.0",
156        "grafana_api==1.0.3",
157    )
158