xref: /unit/test/unit/applications/lang/python.py (revision 1695:48cd8f20dea4)
1import os
2import shutil
3from urllib.parse import quote
4
5import pytest
6from conftest import option
7from unit.applications.proto import TestApplicationProto
8
9
10class TestApplicationPython(TestApplicationProto):
11    application_type = "python"
12    load_module = "wsgi"
13
14    def load(self, script, name=None, module=None, **kwargs):
15        if name is None:
16            name = script
17
18        if module is None:
19            module = self.load_module
20
21        if script[0] == '/':
22            script_path = script
23        else:
24            script_path = option.test_dir + '/python/' + script
25
26        if kwargs.get('isolation') and kwargs['isolation'].get('rootfs'):
27            rootfs = kwargs['isolation']['rootfs']
28
29            if not os.path.exists(rootfs + '/app/python/'):
30                os.makedirs(rootfs + '/app/python/')
31
32            if not os.path.exists(rootfs + '/app/python/' + name):
33                shutil.copytree(script_path, rootfs + '/app/python/' + name)
34
35            script_path = '/app/python/' + name
36
37        app = {
38            "type": self.get_application_type(),
39            "processes": kwargs.pop('processes', {"spare": 0}),
40            "path": script_path,
41            "working_directory": script_path,
42            "module": module,
43        }
44
45        for attr in ('callable', 'home', 'limits', 'path', 'threads'):
46            if attr in kwargs:
47                app[attr] = kwargs.pop(attr)
48
49        self._load_conf(
50            {
51                "listeners": {
52                    "*:7080": {"pass": "applications/" + quote(name, '')}
53                },
54                "applications": {name: app},
55            },
56            **kwargs
57        )
58