You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					55 lines
				
				1.7 KiB
			
		
		
			
		
	
	
					55 lines
				
				1.7 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								"""
							 | 
						||
| 
								 | 
							
								Bootstrapper for test framework plugins.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The entire rationale for this system is to get the modules in plugin/
							 | 
						||
| 
								 | 
							
								imported without importing all of the supporting library, so that we can
							 | 
						||
| 
								 | 
							
								set up things for testing before coverage starts.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The rationale for all of plugin/ being *in* the supporting library in the
							 | 
						||
| 
								 | 
							
								first place is so that the testing and plugin suite is available to other
							 | 
						||
| 
								 | 
							
								libraries, mainly external SQLAlchemy and Alembic dialects, to make use
							 | 
						||
| 
								 | 
							
								of the same test environment and standard suites available to
							 | 
						||
| 
								 | 
							
								SQLAlchemy/Alembic themselves without the need to ship/install a separate
							 | 
						||
| 
								 | 
							
								package outside of SQLAlchemy.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								"""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import os
							 | 
						||
| 
								 | 
							
								import sys
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bootstrap_file = locals()["bootstrap_file"]
							 | 
						||
| 
								 | 
							
								to_bootstrap = locals()["to_bootstrap"]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def load_file_as_module(name):
							 | 
						||
| 
								 | 
							
								    path = os.path.join(os.path.dirname(bootstrap_file), "%s.py" % name)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if sys.version_info >= (3, 5):
							 | 
						||
| 
								 | 
							
								        import importlib.util
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        spec = importlib.util.spec_from_file_location(name, path)
							 | 
						||
| 
								 | 
							
								        assert spec is not None
							 | 
						||
| 
								 | 
							
								        assert spec.loader is not None
							 | 
						||
| 
								 | 
							
								        mod = importlib.util.module_from_spec(spec)
							 | 
						||
| 
								 | 
							
								        spec.loader.exec_module(mod)
							 | 
						||
| 
								 | 
							
								    else:
							 | 
						||
| 
								 | 
							
								        import imp
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        mod = imp.load_source(name, path)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return mod
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if to_bootstrap == "pytest":
							 | 
						||
| 
								 | 
							
								    sys.modules["sqla_plugin_base"] = load_file_as_module("plugin_base")
							 | 
						||
| 
								 | 
							
								    sys.modules["sqla_plugin_base"].bootstrapped_as_sqlalchemy = True
							 | 
						||
| 
								 | 
							
								    if sys.version_info < (3, 0):
							 | 
						||
| 
								 | 
							
								        sys.modules["sqla_reinvent_fixtures"] = load_file_as_module(
							 | 
						||
| 
								 | 
							
								            "reinvent_fixtures_py2k"
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								    sys.modules["sqla_pytestplugin"] = load_file_as_module("pytestplugin")
							 | 
						||
| 
								 | 
							
								else:
							 | 
						||
| 
								 | 
							
								    raise Exception("unknown bootstrap: %s" % to_bootstrap)  # noqa
							 |