summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/util/langhelpers.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/util/langhelpers.py')
-rw-r--r--lib/sqlalchemy/util/langhelpers.py44
1 files changed, 44 insertions, 0 deletions
diff --git a/lib/sqlalchemy/util/langhelpers.py b/lib/sqlalchemy/util/langhelpers.py
index 49c5d693a..da3fbc718 100644
--- a/lib/sqlalchemy/util/langhelpers.py
+++ b/lib/sqlalchemy/util/langhelpers.py
@@ -18,6 +18,7 @@ import hashlib
import inspect
import itertools
import operator
+import os
import re
import sys
import textwrap
@@ -32,6 +33,7 @@ from typing import Generic
from typing import Iterator
from typing import List
from typing import Mapping
+from typing import no_type_check
from typing import NoReturn
from typing import Optional
from typing import overload
@@ -2106,3 +2108,45 @@ def has_compiled_ext(raise_=False):
)
else:
return False
+
+
+@no_type_check
+def console_scripts(
+ path: str, options: dict, ignore_output: bool = False
+) -> None:
+
+ import subprocess
+ import shlex
+ from pathlib import Path
+
+ is_posix = os.name == "posix"
+
+ entrypoint_name = options["entrypoint"]
+
+ for entry in compat.importlib_metadata_get("console_scripts"):
+ if entry.name == entrypoint_name:
+ impl = entry
+ break
+ else:
+ raise Exception(
+ f"Could not find entrypoint console_scripts.{entrypoint_name}"
+ )
+ cmdline_options_str = options.get("options", "")
+ cmdline_options_list = shlex.split(cmdline_options_str, posix=is_posix) + [
+ path
+ ]
+
+ kw = {}
+ if ignore_output:
+ kw["stdout"] = kw["stderr"] = subprocess.DEVNULL
+
+ subprocess.run(
+ [
+ sys.executable,
+ "-c",
+ "import %s; %s.%s()" % (impl.module, impl.module, impl.attr),
+ ]
+ + cmdline_options_list,
+ cwd=Path(__file__).parent.parent,
+ **kw,
+ )