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