def test_registration_ok(self): '''This test case ensures all resources are registered correctly.''' registrator = ResourcesRegistrator( Mock(), file_patterns=["simple_resource.py"], folder_pattern=["tests/"]) root_folder = instantiator.get_class_abslocation(SettingsFacade) registrator.register_resources(root_folder) registry = ResourcesRegistry() resource = registry.find_by_name("Simple Resource") self.assertIsNotNone(resource) self.assertEqual(resource.name, "Simple Resource") self.assertEqual(resource.version, 1.0) self.assertEqual(resource.url, "/simple-resources") self.assertEqual(resource.subresources, {"address": ["address_id"]}) model = resource.model self.assertIsNotNone(model) from fantastico.roa.tests.simple_resource import SimpleResource self.assertEqual(model, SimpleResource)
def test_conf_generated_ok(self): '''This test case ensures configuration file is generated correctly and added to nginx enabled sites.''' self._args.extend([ "--ipaddress", "127.0.0.1", "--vhost-name", "test-app.com", "--uwsgi-port", "12090", "--root-folder", "/test/folder/vhost", "--modules-folder", "/" ]) root_folder = os.path.abspath( instantiator.get_class_abslocation(BasicSettings) + "../") tpl_loader = FileSystemLoader(searchpath=root_folder) tpl_env = Environment(loader=tpl_loader) config_data = { "ip_address": "127.0.0.1", "vhost_name": "test-app.com", "http_port": 80, "uwsgi_port": 12090, "root_folder": "/test/folder/vhost", "modules_folder": "/" } expected_config = tpl_env.get_template( "/deployment/conf/nginx/fantastico-wsgi").render(config_data) config = self._config_nginx(self._args) self.assertEqual(expected_config, config)
def test_conf_generated_ok(self): '''This test case ensures configuration file is generated correctly and added to nginx enabled sites.''' self._args.extend([ "--ipaddress", "127.0.0.1", "--vhost-name", "test-app.com", "--uwsgi-port", "12090", "--root-folder", "/test/folder/vhost", "--modules-folder", "/"]) root_folder = os.path.abspath(instantiator.get_class_abslocation(BasicSettings) + "../") tpl_loader = FileSystemLoader(searchpath=root_folder) tpl_env = Environment(loader=tpl_loader) config_data = {"ip_address": "127.0.0.1", "vhost_name": "test-app.com", "http_port": 80, "uwsgi_port": 12090, "root_folder": "/test/folder/vhost", "modules_folder": "/"} expected_config = tpl_env.get_template("/deployment/conf/nginx/fantastico-wsgi").render(config_data) config = self._config_nginx(self._args) self.assertEqual(expected_config, config)
def serve_asset(self, request, component_name, asset_path, **kwargs): '''This method is invoked whenever a request to a static asset is done.''' file_path = "%s%s/%s/%s" % (instantiator.get_class_abslocation( self._settings_facade.get_config().__class__), component_name, self.static_folder, asset_path) err_content_type = "text/html; charset=UTF-8" if not component_name or len(component_name.strip()) == 0: return Response(status=400, content_type=err_content_type, text="No component name provided.") if not asset_path or len(asset_path.strip()) == 0: return Response(status=400, content_type=err_content_type, text="No asset path provided.") os_provider = kwargs.get("os_provider") or os if not self._is_asset_available(file_path, os_provider): return Response(status=404, content_type=err_content_type, text="Asset %s not found." % file_path) return self._load_file_from_disk(request, file_path, **kwargs)
def test_config_generation_ok(self): '''This test case ensures config nginx script works as expected.''' settings_cls = SettingsFacade root_folder = os.path.abspath(instantiator.get_class_abslocation(settings_cls) + "../") tpl_loader = FileSystemLoader(searchpath=root_folder) tpl_env = Environment(loader=tpl_loader) config_data = {"ip_address": "127.0.0.1", "vhost_name": "test-app.com", "http_port": 80, "uwsgi_port": 12090, "root_folder": "/test/folder/vhost", "modules_folder": "/"} expected_config = tpl_env.get_template("/deployment/conf/nginx/fantastico-wsgi").render(config_data) sys.argv = ["config_nginx.py", "--ipaddress", "127.0.0.1", "--vhost-name", "test-app.com", "--uwsgi-port", "12090", "--root-folder", "/test/folder/vhost", "--modules-folder", "/"] from fantastico.deployment import config_nginx generated_config = StringIO() config_nginx.main(generated_config) self.assertEqual(expected_config, generated_config.getvalue())
def __init__(self, environment, url_invoker_cls=FantasticoUrlInternalInvoker): super(Component, self).__init__(environment) self._url_invoker_cls = url_invoker_cls self._comp_search_path = instantiator.get_class_abslocation(Component)
def load_template(self, tpl_name, model_data=None, get_template=Environment.get_template, enable_global_folder=False): '''This method is responsible for loading a template from disk and render it using the given model data. .. code-block:: python @ControllerProvider() class TestController(BaseController): @Controller(url="/simple/test/hello", method="GET") def say_hello(self, request): return Response(self.load_template("/hello.html")) The above snippet will search for **hello.html** into component folder/views/. ''' if self._tpl_env is None: self.__init_jinja_context() model_data = model_data or {} if enable_global_folder: config_cls = self._settings_facade.get_config().__class__ parent_path = instantiator.get_class_abslocation(config_cls) if config_cls != BasicSettings: parent_path = os.path.abspath("%s../" % parent_path) if parent_path not in self._tpl_loader.searchpath: self._tpl_loader.searchpath.append(parent_path) try: return get_template(self._tpl_env, tpl_name).render(model_data) except TemplateNotFound as ex: raise FantasticoTemplateNotFoundError(ex) except Exception as ex: raise FantasticoError(ex)
def test_registration_ok(self): '''This test case ensures all resources are registered correctly.''' registrator = ResourcesRegistrator(Mock(), file_patterns=["simple_resource.py"], folder_pattern=["tests/"]) root_folder = instantiator.get_class_abslocation(SettingsFacade) registrator.register_resources(root_folder) registry = ResourcesRegistry() resource = registry.find_by_name("Simple Resource") self.assertIsNotNone(resource) self.assertEqual(resource.name, "Simple Resource") self.assertEqual(resource.version, 1.0) self.assertEqual(resource.url, "/simple-resources") self.assertEqual(resource.subresources, {"address": ["address_id"]}) model = resource.model self.assertIsNotNone(model) from fantastico.roa.tests.simple_resource import SimpleResource self.assertEqual(model, SimpleResource)
def start_server(): root_folder = os.path.realpath(instantiator.get_class_abslocation(ProdServerIntegration) + "/../../../") + "/" start_prod_server = ["%srun_prod_server.sh" % root_folder] self._server_proc = Popen(start_prod_server, cwd=root_folder, env=os.environ, stdout=subprocess.PIPE, stderr=subprocess.PIPE) self._server_proc.communicate()
def __init__(self): self._args_parser = ArgumentParser(description="This script generates an nginx vhost file for the" + " current fantastico project.") root_folder = os.path.abspath(instantiator.get_class_abslocation(BasicSettings) + "../") tpl_loader = FileSystemLoader(searchpath=root_folder) self._tpl_env = Environment(loader=tpl_loader) self._build_args_parser()
def init(self): from fantastico.mvc.controller_registrator import ControllerRouteLoader self._settings_facade = Mock() self._settings_facade.get_config = Mock(return_value=settings.BasicSettings()) self._settings_facade.get = Mock(return_value=["fantastico.locale"]) self._route_loader = ControllerRouteLoader(settings_facade=self._settings_facade, scanned_folder=instantiator.get_class_abslocation(ControllerRouteLoaderTests)) self._settings_facade.get.assert_called_once_with("mvc_additional_paths")
def load_routes(self): '''This method simple triggers resources registration and returns empty routes. Using this mechanism guarantees that routing engine will also discover ROA resources.''' active_config = self._settings_facade.get_config().__class__ root_folder = instantiator.get_class_abslocation(active_config) self.register_resources(root_folder) return {}
def __init__(self): self._args_parser = ArgumentParser( description="This script generates an nginx vhost file for the" + " current fantastico project.") root_folder = os.path.abspath( instantiator.get_class_abslocation(BasicSettings) + "../") tpl_loader = FileSystemLoader(searchpath=root_folder) self._tpl_env = Environment(loader=tpl_loader) self._build_args_parser()
def handle_favicon(self, request, **kwargs): '''This method is used to handle favicon requests coming from browsers.''' os_provider = kwargs.get("os_provider") or os file_path = "%sstatic/%s" % (instantiator.get_class_abslocation( self._settings_facade.get_config().__class__), "favicon.ico") if not os_provider.path.exists(file_path): return Response(app_iter=[], content_type="image/x-icon") return self._load_file_from_disk(request, file_path, **kwargs)
def handle_favicon(self, request, **kwargs): '''This method is used to handle favicon requests coming from browsers.''' os_provider = kwargs.get("os_provider") or os file_path = "%sstatic/%s" % (instantiator.get_class_abslocation(self._settings_facade.get_config().__class__), "favicon.ico") if not os_provider.path.exists(file_path): return Response(app_iter=[], content_type="image/x-icon") return self._load_file_from_disk(request, file_path, **kwargs)
def __init__(self, settings_facade=SettingsFacade, scanned_folder=None, ignore_prefix=None): super(ControllerRouteLoader, self).__init__(settings_facade) self._scanned_folder = scanned_folder or instantiator.get_class_abslocation( self._settings_facade.get_config().__class__ ) custom_packages = self._settings_facade.get("mvc_additional_paths") folders = self._get_custom_packages_filelist(custom_packages) folders.add(self._scanned_folder) self._folders = list(folders) self._ignore_prefix = ignore_prefix or ["__init__", "__pycache__", "tests", "test", "itest"]
def init(self): from fantastico.mvc.controller_registrator import ControllerRouteLoader self._settings_facade = Mock() self._settings_facade.get_config = Mock( return_value=settings.BasicSettings()) self._settings_facade.get = Mock(return_value=["fantastico.locale"]) self._route_loader = ControllerRouteLoader( settings_facade=self._settings_facade, scanned_folder=instantiator.get_class_abslocation( ControllerRouteLoaderTests)) self._settings_facade.get.assert_called_once_with( "mvc_additional_paths")
def test_loadroutes_ok(self): '''This test case ensures loadroutes method first scans all files for resources and then returns an empty dictionary of routes.''' expected_path = instantiator.get_class_abslocation(self.__class__) settings_facade = Mock() settings_facade.get_config = lambda: self registrator = ResourcesRegistrator(settings_facade) registrator.register_resources = Mock() self.assertEqual(registrator.load_routes(), {}) registrator.register_resources.assert_called_once_with(expected_path)
def __init__(self, settings_facade=SettingsFacade, scanned_folder=None, ignore_prefix=None): super(ControllerRouteLoader, self).__init__(settings_facade) self._scanned_folder = scanned_folder or instantiator.get_class_abslocation( self._settings_facade.get_config().__class__) custom_packages = self._settings_facade.get("mvc_additional_paths") folders = self._get_custom_packages_filelist(custom_packages) folders.add(self._scanned_folder) self._folders = list(folders) self._ignore_prefix = ignore_prefix or [ "__init__", "__pycache__", "tests", "test", "itest" ]
def _register_subcommands(self, supported_prefixes): '''This methods loads all available subcommands from sdk and build _arguments supported by fantastico sdk directly.''' def is_file_supported(filename): '''This method decides if a filename is supported as possible subcommand provider module or not.''' for prefix in supported_prefixes: if filename.startswith(prefix): return True return False local_folder = "%s%s/" % (instantiator.get_class_abslocation(SdkCore), SdkCore._COMMANDS_FOLDER) instantiator.import_modules_from_folder( local_folder, lambda folder, filename: is_file_supported(filename), self._settings_facade) self._register_root_subcommands()
def serve_asset(self, request, component_name, asset_path, **kwargs): '''This method is invoked whenever a request to a static asset is done.''' file_path = "%s%s/%s/%s" % (instantiator.get_class_abslocation(self._settings_facade.get_config().__class__), component_name, self.static_folder, asset_path) err_content_type = "text/html; charset=UTF-8" if not component_name or len(component_name.strip()) == 0: return Response(status=400, content_type=err_content_type, text="No component name provided.") if not asset_path or len(asset_path.strip()) == 0: return Response(status=400, content_type=err_content_type, text="No asset path provided.") os_provider = kwargs.get("os_provider") or os if not self._is_asset_available(file_path, os_provider): return Response(status=404, content_type=err_content_type, text="Asset %s not found." % file_path) return self._load_file_from_disk(request, file_path, **kwargs)
def _register_subcommands(self, supported_prefixes): '''This methods loads all available subcommands from sdk and build _arguments supported by fantastico sdk directly.''' def is_file_supported(filename): '''This method decides if a filename is supported as possible subcommand provider module or not.''' for prefix in supported_prefixes: if filename.startswith(prefix): return True return False local_folder = "%s%s/" % (instantiator.get_class_abslocation(SdkCore), SdkCore._COMMANDS_FOLDER) instantiator.import_modules_from_folder(local_folder, lambda folder, filename: is_file_supported(filename), self._settings_facade) self._register_root_subcommands()
def init(self): self._response = None self._root_folder = os.path.realpath(instantiator.get_class_abslocation(BasicSettings))
def init(self): self._response = None self._root_folder = os.path.realpath( instantiator.get_class_abslocation(BasicSettings))
def init(self): '''This method is executed before each test case in order to setup common dependencies.''' self._comp_root = instantiator.get_class_abslocation(BasicSettings)