From 98eae4e181cb2d1bbc67ec834bfad29dcba7f461 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Tue, 5 Apr 2022 19:00:19 -0400 Subject: use code generation for scoped_session our decorator thing generates code in any case, so point it at the file itself to generate real code for the blocks rather than doing things dynamically. this will allow typing tools to have no problem whatsoever and we also reduce import time overhead. file size will be a lot bigger though, shrugs. syntax / dupe method / etc. checking will be accomplished by our existing linting / typing / formatting tools. As we are also using "from __future__ import annotations", we also no longer have to apply quotes to generated annotations. Change-Id: I20962cb65bda63ff0fb67357ab346e9b1ef4f108 --- lib/sqlalchemy/testing/plugin/plugin_base.py | 17 ++++++++++------- lib/sqlalchemy/testing/plugin/pytestplugin.py | 18 ++++++++++++------ 2 files changed, 22 insertions(+), 13 deletions(-) (limited to 'lib/sqlalchemy/testing/plugin') diff --git a/lib/sqlalchemy/testing/plugin/plugin_base.py b/lib/sqlalchemy/testing/plugin/plugin_base.py index 52e42bb97..b90858512 100644 --- a/lib/sqlalchemy/testing/plugin/plugin_base.py +++ b/lib/sqlalchemy/testing/plugin/plugin_base.py @@ -5,14 +5,8 @@ # This module is part of SQLAlchemy and is released under # the MIT License: https://www.opensource.org/licenses/mit-license.php -"""Testing extensions. - -this module is designed to work as a testing-framework-agnostic library, -created so that multiple test frameworks can be supported at once -(mostly so that we can migrate to new ones). The current target -is pytest. +from __future__ import annotations -""" import abc import configparser import logging @@ -23,6 +17,15 @@ from typing import Any from sqlalchemy.testing import asyncio +"""Testing extensions. + +this module is designed to work as a testing-framework-agnostic library, +created so that multiple test frameworks can be supported at once +(mostly so that we can migrate to new ones). The current target +is pytest. + +""" + # flag which indicates we are in the SQLAlchemy testing suite, # and not that of Alembic or a third party dialect. bootstrapped_as_sqlalchemy = False diff --git a/lib/sqlalchemy/testing/plugin/pytestplugin.py b/lib/sqlalchemy/testing/plugin/pytestplugin.py index 6efeac504..ab93e60e2 100644 --- a/lib/sqlalchemy/testing/plugin/pytestplugin.py +++ b/lib/sqlalchemy/testing/plugin/pytestplugin.py @@ -1,9 +1,4 @@ -try: - # installed by bootstrap.py - import sqla_plugin_base as plugin_base -except ImportError: - # assume we're a package, use traditional import - from . import plugin_base +from __future__ import annotations import argparse import collections @@ -17,6 +12,13 @@ import uuid import pytest +try: + # installed by bootstrap.py + import sqla_plugin_base as plugin_base +except ImportError: + # assume we're a package, use traditional import + from . import plugin_base + def pytest_addoption(parser): group = parser.getgroup("sqlalchemy") @@ -565,6 +567,10 @@ def _pytest_fn_decorator(target): from sqlalchemy.util.compat import inspect_getfullargspec def _exec_code_in_env(code, env, fn_name): + # note this is affected by "from __future__ import annotations" at + # the top; exec'ed code will use non-evaluated annotations + # which allows us to be more flexible with code rendering + # in format_argpsec_plus() exec(code, env) return env[fn_name] -- cgit v1.2.1