def project(request, pytestconfig): project_dir = get_populus_option(cmdline_option="--populus-project", ini_option="populus_project", environ_var="PYTEST_POPULUS_PROJECT", pytestconfig=pytestconfig, default=pytestconfig.args[0]) if not os.path.exists(get_json_config_file_path(project_dir)): raise FileNotFoundError( "No populus project found for testing in {project_dir}".format( project_dir=project_dir)) contracts = request.config.cache.get(CACHE_KEY_CONTRACTS, None) mtime = request.config.cache.get(CACHE_KEY_MTIME, None) project = Project(project_dir, create_config_file=True) project.fill_contracts_cache(contracts, mtime) request.config.cache.set( CACHE_KEY_CONTRACTS, normalize_object_for_json(project.compiled_contract_data), ) request.config.cache.set( CACHE_KEY_MTIME, get_latest_mtime(project.get_all_source_file_paths()), ) return project
def project(request): contracts = request.config.cache.get(CACHE_KEY_CONTRACTS, None) mtime = request.config.cache.get(CACHE_KEY_MTIME, None) project = Project() project.fill_contracts_cache(contracts, mtime) request.config.cache.set(CACHE_KEY_CONTRACTS, project.compiled_contract_data) request.config.cache.set(CACHE_KEY_MTIME, project.get_source_modification_time()) return project
def project(request): # This should probably be configurable using the `request` fixture but it's # unclear what needs to be configurable. # use pytest cache to preset the sessions project to recently compiled contracts contracts = request.config.cache.get(CACHE_KEY_CONTRACTS, None) mtime = request.config.cache.get(CACHE_KEY_MTIME, None) project = Project() project.fill_contracts_cache(contracts, mtime) request.config.cache.set(CACHE_KEY_CONTRACTS, project.compiled_contracts) request.config.cache.set(CACHE_KEY_MTIME, project.get_source_modification_time()) return project
def test_project_fill_contracts_cache(write_project_file, MATH): write_project_file('contracts/Math.sol', MATH['source']) source_mtime = Project().get_source_modification_time() project = Project() compiled_contracts_object_id = id(project.compiled_contracts) # fill with code from the future -> no recompilation project.fill_contracts_cache(project.compiled_contracts, source_mtime + 10) assert id(project.compiled_contracts) == compiled_contracts_object_id # fill with code from the past -> recompilation project.fill_contracts_cache(project.compiled_contracts, source_mtime - 10) assert not id(project.compiled_contracts) == compiled_contracts_object_id