##// END OF EJS Templates
Use single quotes in sql string literal (#13968)...
Use single quotes in sql string literal (#13968) the SQL spec requires that string literals use single quotes and column references (or other identifiers) use double quotes. sqlite permits the use of double quotes for string literals in "unambiguous cases". For some reason, its understanding of what constitutes unambiguous has changed recently - I'm on FreeBSD 14.0-CURRENT with sqlite 3.41.0 - and attempting to do anything with ipython throws a very strange sqlite operation error: ``` [+] ~% ipython --version (test) audrey@daisy [12:18:02 AM] 8.11.0 [+] ~% ipython (test) audrey@daisy [12:18:04 AM] [TerminalIPythonApp] ERROR | Failed to create history session in /usr/home/audrey/.ipython/profile_default/history.sqlite. History will not be saved. Traceback (most recent call last): File "/usr/home/audrey/.virtualenvs/test/lib/python3.9/site-packages/IPython/core/history.py", line 545, in __init__ self.new_session() File "/usr/home/audrey/.virtualenvs/test/lib/python3.9/site-packages/decorator.py", line 232, in fun return caller(func, *(extras + args), **kw) File "/usr/home/audrey/.virtualenvs/test/lib/python3.9/site-packages/IPython/core/history.py", line 60, in only_when_enabled return f(self, *a, **kw) File "/usr/home/audrey/.virtualenvs/test/lib/python3.9/site-packages/IPython/core/history.py", line 570, in new_session cur = conn.execute("""INSERT INTO sessions VALUES (NULL, ?, NULL, sqlite3.OperationalError: no such column: Python 3.9.16 (main, Feb 28 2023, 01:31:45) Type 'copyright', 'credits' or 'license' for more information IPython 8.11.0 -- An enhanced Interactive Python. Type '?' for help. ``` This patch fixes it. idk if this constitutes a bug in sqlite3, but this is, I guess, more correct.

File last commit:

r27386:82d1a374
r28168:9a5baf06 merge
Show More
conftest.py
87 lines | 2.6 KiB | text/x-python | PythonLexer
Matthias Bussonnier
Also run test with Pytest....
r25117 import builtins
Min RK
make sure to run async tests...
r27386 import inspect
Matthias Bussonnier
Also run test with Pytest....
r25117 import os
import pathlib
import shutil
Min RK
make sure to run async tests...
r27386 import sys
import types
import pytest
Matthias Bussonnier
Also run test with Pytest....
r25117
Nikita Kniazev
Pytest diagnostics improvement for `IPython.testing.tools`...
r27243 # Must register before it gets imported
pytest.register_assert_rewrite("IPython.testing.tools")
Srinivas Reddy Thatiparthy
Change absolute imports to relative imports to facilitate processes embedding kernel or debugger
r25227 from .testing import tools
Matthias Bussonnier
Also run test with Pytest....
r25117
Min RK
make sure to run async tests...
r27386 def pytest_collection_modifyitems(items):
"""This function is automatically run by pytest passing all collected test
functions.
We use it to add asyncio marker to all async tests and assert we don't use
test functions that are async generators which wouldn't make sense.
"""
for item in items:
if inspect.iscoroutinefunction(item.obj):
item.add_marker("asyncio")
assert not inspect.isasyncgenfunction(item.obj)
Matthias Bussonnier
Also run test with Pytest....
r25117 def get_ipython():
Srinivas Reddy Thatiparthy
Change absolute imports to relative imports to facilitate processes embedding kernel or debugger
r25227 from .terminal.interactiveshell import TerminalInteractiveShell
Matthias Bussonnier
Also run test with Pytest....
r25117 if TerminalInteractiveShell._instance:
return TerminalInteractiveShell.instance()
config = tools.default_config()
config.TerminalInteractiveShell.simple_prompt = True
# Create and initialize our test-friendly IPython instance.
shell = TerminalInteractiveShell.instance(config=config)
return shell
@pytest.fixture(scope='session', autouse=True)
def work_path():
path = pathlib.Path("./tmp-ipython-pytest-profiledir")
os.environ["IPYTHONDIR"] = str(path.absolute())
if path.exists():
raise ValueError('IPython dir temporary path already exists ! Did previous test run exit successfully ?')
path.mkdir()
Min RK
make sure to run async tests...
r27386 yield
Matthias Bussonnier
Also run test with Pytest....
r25117 shutil.rmtree(str(path.resolve()))
def nopage(strng, start=0, screen_lines=0, pager_cmd=None):
if isinstance(strng, dict):
strng = strng.get("text/plain", "")
print(strng)
def xsys(self, cmd):
"""Replace the default system call with a capturing one for doctest.
"""
# We use getoutput, but we need to strip it because pexpect captures
# the trailing newline differently from commands.getoutput
print(self.getoutput(cmd, split=False, depth=1).rstrip(), end="", file=sys.stdout)
sys.stdout.flush()
# for things to work correctly we would need this as a session fixture;
# unfortunately this will fail on some test that get executed as _collection_
# time (before the fixture run), in particular parametrized test that contain
# yields. so for now execute at import time.
#@pytest.fixture(autouse=True, scope='session')
def inject():
builtins.get_ipython = get_ipython
builtins._ip = get_ipython()
builtins.ip = get_ipython()
builtins.ip.system = types.MethodType(xsys, ip)
builtins.ip.builtin_trap.activate()
Srinivas Reddy Thatiparthy
Change absolute imports to relative imports to facilitate processes embedding kernel or debugger
r25227 from .core import page
Matthias Bussonnier
Also run test with Pytest....
r25117
page.pager_page = nopage
# yield
inject()