chore(deps): update pre-commit hook astral-sh/ruff-pre-commit to v0.8.3 - autoclosed #1167
GitHub Actions / Test Results - 3.8
failed
Dec 13, 2024 in 0s
2 fail, 5 skipped, 91 pass in 14s
Annotations
Check warning on line 0 in duckdb_engine.tests.test_basic
github-actions / Test Results - 3.8
test_get_schema_names (duckdb_engine.tests.test_basic) failed
results.xml [took 0s]
Raw output
assert ['"daffy duck..._schema', ...] == ['"daffy duck...ry.main', ...]
At index 0 diff: #x1B[0m#x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mdaffy duck#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m.main#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m != #x1B[0m#x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mdaffy duck#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m.information_schema#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
Right contains 3 more items, first extra item: #x1B[0m#x1B[33m'#x1B[39;49;00m#x1B[33msystem.main#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
Full diff:
#x1B[0m#x1B[90m #x1B[39;49;00m [#x1B[90m#x1B[39;49;00m
#x1B[91m- '"daffy duck".information_schema',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[90m #x1B[39;49;00m '"daffy duck".main',#x1B[90m#x1B[39;49;00m
#x1B[90m #x1B[39;49;00m '"daffy duck"."quack quack"',#x1B[90m#x1B[39;49;00m
#x1B[90m #x1B[39;49;00m '"daffy duck"."you\'re "" despicable"',#x1B[90m#x1B[39;49;00m
#x1B[91m- 'memory.information_schema',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[90m #x1B[39;49;00m 'memory.main',#x1B[90m#x1B[39;49;00m
#x1B[90m #x1B[39;49;00m 'memory."quack quack"',#x1B[90m#x1B[39;49;00m
#x1B[90m #x1B[39;49;00m 'system.information_schema',#x1B[90m#x1B[39;49;00m
#x1B[90m #x1B[39;49;00m 'system.main',#x1B[90m#x1B[39;49;00m
#x1B[91m- 'temp.information_schema',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[90m #x1B[39;49;00m 'temp.main',#x1B[90m#x1B[39;49;00m
#x1B[90m #x1B[39;49;00m ]#x1B[90m#x1B[39;49;00m
inspector = <duckdb_engine.DuckDBInspector object at 0x7fa01c497f10>
session = <sqlalchemy.orm.session.Session object at 0x7fa01c4972e0>
#x1B[0m#x1B[37m@mark#x1B[39;49;00m.skipif(#x1B[90m#x1B[39;49;00m
supports_attach #x1B[95mis#x1B[39;49;00m #x1B[94mFalse#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
reason=#x1B[33m"#x1B[39;49;00m#x1B[33mATTACH is not supported for DuckDB version < 0.7.0#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
)#x1B[90m#x1B[39;49;00m
#x1B[94mdef#x1B[39;49;00m #x1B[92mtest_get_schema_names#x1B[39;49;00m(inspector: Inspector, session: Session) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
#x1B[90m# Using multi-line strings because of all the single and double quotes flying around...#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
cmds = [#x1B[90m#x1B[39;49;00m
#x1B[90m #x1B[39;49;00m#x1B[33m"""CREATE SCHEMA "quack quack" """#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
#x1B[90m #x1B[39;49;00m#x1B[33m"""CREATE SCHEMA "daffy duck"."you're "" despicable" """#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
]#x1B[90m#x1B[39;49;00m
#x1B[94mfor#x1B[39;49;00m cmd #x1B[95min#x1B[39;49;00m cmds:#x1B[90m#x1B[39;49;00m
session.execute(text(cmd))#x1B[90m#x1B[39;49;00m
session.commit()#x1B[90m#x1B[39;49;00m
#x1B[90m#x1B[39;49;00m
#x1B[90m# Deliberately excluding pg_catalog schema (to align with Postgres)#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
names = inspector.get_schema_names()#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m supports_attach:#x1B[90m#x1B[39;49;00m
> #x1B[94massert#x1B[39;49;00m names == [#x1B[90m#x1B[39;49;00m
#x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mdaffy duck#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m.information_schema#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
#x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mdaffy duck#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m.main#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
#x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mdaffy duck#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m.#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mquack quack#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
#x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mdaffy duck#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m.#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33myou#x1B[39;49;00m#x1B[33m\'#x1B[39;49;00m#x1B[33mre #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m despicable#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
#x1B[33m"#x1B[39;49;00m#x1B[33mmemory.information_schema#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
#x1B[33m"#x1B[39;49;00m#x1B[33mmemory.main#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
#x1B[33m'#x1B[39;49;00m#x1B[33mmemory.#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mquack quack#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
#x1B[33m"#x1B[39;49;00m#x1B[33msystem.information_schema#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
#x1B[33m"#x1B[39;49;00m#x1B[33msystem.main#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
#x1B[33m"#x1B[39;49;00m#x1B[33mtemp.information_schema#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
#x1B[33m"#x1B[39;49;00m#x1B[33mtemp.main#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
]#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE assert ['"daffy duck..._schema', ...] == ['"daffy duck...ry.main', ...]#x1B[0m
#x1B[1m#x1B[31mE #x1B[0m
#x1B[1m#x1B[31mE At index 0 diff: #x1B[0m#x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mdaffy duck#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m.main#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m != #x1B[0m#x1B[33m'#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mdaffy duck#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m.information_schema#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m#x1B[0m
#x1B[1m#x1B[31mE Right contains 3 more items, first extra item: #x1B[0m#x1B[33m'#x1B[39;49;00m#x1B[33msystem.main#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m#x1B[0m
#x1B[1m#x1B[31mE #x1B[0m
#x1B[1m#x1B[31mE Full diff:#x1B[0m
#x1B[1m#x1B[31mE #x1B[0m#x1B[90m #x1B[39;49;00m [#x1B[90m#x1B[39;49;00m#x1B[0m
#x1B[1m#x1B[31mE #x1B[91m- '"daffy duck".information_schema',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m#x1B[0m
#x1B[1m#x1B[31mE #x1B[90m #x1B[39;49;00m '"daffy duck".main',#x1B[90m#x1B[39;49;00m#x1B[0m
#x1B[1m#x1B[31mE #x1B[90m #x1B[39;49;00m '"daffy duck"."quack quack"',#x1B[90m#x1B[39;49;00m#x1B[0m
#x1B[1m#x1B[31mE #x1B[90m #x1B[39;49;00m '"daffy duck"."you\'re "" despicable"',#x1B[90m#x1B[39;49;00m#x1B[0m
#x1B[1m#x1B[31mE #x1B[91m- 'memory.information_schema',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m#x1B[0m
#x1B[1m#x1B[31mE #x1B[90m #x1B[39;49;00m 'memory.main',#x1B[90m#x1B[39;49;00m#x1B[0m
#x1B[1m#x1B[31mE #x1B[90m #x1B[39;49;00m 'memory."quack quack"',#x1B[90m#x1B[39;49;00m#x1B[0m
#x1B[1m#x1B[31mE #x1B[90m #x1B[39;49;00m 'system.information_schema',#x1B[90m#x1B[39;49;00m#x1B[0m
#x1B[1m#x1B[31mE #x1B[90m #x1B[39;49;00m 'system.main',#x1B[90m#x1B[39;49;00m#x1B[0m
#x1B[1m#x1B[31mE #x1B[91m- 'temp.information_schema',#x1B[39;49;00m#x1B[90m#x1B[39;49;00m#x1B[0m
#x1B[1m#x1B[31mE #x1B[90m #x1B[39;49;00m 'temp.main',#x1B[90m#x1B[39;49;00m#x1B[0m
#x1B[1m#x1B[31mE #x1B[90m #x1B[39;49;00m ]#x1B[90m#x1B[39;49;00m#x1B[0m
#x1B[1m#x1B[31mduckdb_engine/tests/test_basic.py#x1B[0m:189: AssertionError
Check warning on line 0 in duckdb_engine.tests.test_basic
github-actions / Test Results - 3.8
test_preload_extension (duckdb_engine.tests.test_basic) failed
results.xml [took 0s]
Raw output
sqlalchemy.exc.OperationalError: (duckdb.duckdb.IOException) IO Error: Extension "/home/runner/.duckdb/extensions/bcd65821a9/linux_amd64_gcc4/httpfs.duckdb_extension" could not be loaded because its signature is either missing or invalid and unsigned extensions are disabled by configuration (allow_unsigned_extensions)
(Background on this error at: https://sqlalche.me/e/14/e3q8)
self = Engine(duckdb:///)
fn = <bound method Pool.connect of <sqlalchemy.pool.impl.QueuePool object at 0x7fa01c50c6a0>>
connection = None
#x1B[0m#x1B[94mdef#x1B[39;49;00m #x1B[92m_wrap_pool_connect#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m, fn, connection):#x1B[90m#x1B[39;49;00m
dialect = #x1B[96mself#x1B[39;49;00m.dialect#x1B[90m#x1B[39;49;00m
#x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
> #x1B[94mreturn#x1B[39;49;00m fn()#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/engine/base.py#x1B[0m:3371:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/pool/base.py#x1B[0m:327: in connect
#x1B[0m#x1B[94mreturn#x1B[39;49;00m _ConnectionFairy._checkout(#x1B[96mself#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/pool/base.py#x1B[0m:894: in _checkout
#x1B[0mfairy = _ConnectionRecord.checkout(pool)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/pool/base.py#x1B[0m:493: in checkout
#x1B[0mrec = pool._do_get()#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/pool/impl.py#x1B[0m:146: in _do_get
#x1B[0m#x1B[96mself#x1B[39;49;00m._dec_overflow()#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py#x1B[0m:70: in __exit__
#x1B[0mcompat.raise_(#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/util/compat.py#x1B[0m:211: in raise_
#x1B[0m#x1B[94mraise#x1B[39;49;00m exception#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/pool/impl.py#x1B[0m:143: in _do_get
#x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._create_connection()#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/pool/base.py#x1B[0m:273: in _create_connection
#x1B[0m#x1B[94mreturn#x1B[39;49;00m _ConnectionRecord(#x1B[96mself#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/pool/base.py#x1B[0m:388: in __init__
#x1B[0m#x1B[96mself#x1B[39;49;00m.__connect()#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/pool/base.py#x1B[0m:691: in __connect
#x1B[0mpool.logger.debug(#x1B[33m"#x1B[39;49;00m#x1B[33mError on connect(): #x1B[39;49;00m#x1B[33m%s#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, e)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py#x1B[0m:70: in __exit__
#x1B[0mcompat.raise_(#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/util/compat.py#x1B[0m:211: in raise_
#x1B[0m#x1B[94mraise#x1B[39;49;00m exception#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/pool/base.py#x1B[0m:686: in __connect
#x1B[0m#x1B[96mself#x1B[39;49;00m.dbapi_connection = connection = pool._invoke_creator(#x1B[96mself#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/engine/create.py#x1B[0m:574: in connect
#x1B[0m#x1B[94mreturn#x1B[39;49;00m dialect.connect(*cargs, **cparams)#x1B[90m#x1B[39;49;00m
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <duckdb_engine.Dialect object at 0x7fa01c50c9a0>, cargs = ()
cparams = {'config': {'custom_user_agent': 'duckdb_engine/0.13.7-pre0(sqlalchemy/1.4.54)'}}
preload_extensions = ['httpfs']
ext = {'s3_region': 'ap-southeast-2', 's3_use_ssl': True}
user_agent = 'duckdb_engine/0.13.7-pre0(sqlalchemy/1.4.54)'
conn = <duckdb.duckdb.DuckDBPyConnection object at 0x7fa018c5eeb0>
extension = 'httpfs'
#x1B[0m#x1B[94mdef#x1B[39;49;00m #x1B[92mconnect#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m, *cargs: Any, **cparams: Any) -> #x1B[33m"#x1B[39;49;00m#x1B[33mConnection#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
core_keys = get_core_config()#x1B[90m#x1B[39;49;00m
preload_extensions = cparams.pop(#x1B[33m"#x1B[39;49;00m#x1B[33mpreload_extensions#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, [])#x1B[90m#x1B[39;49;00m
config = #x1B[96mdict#x1B[39;49;00m(cparams.get(#x1B[33m"#x1B[39;49;00m#x1B[33mconfig#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, {}))#x1B[90m#x1B[39;49;00m
cparams[#x1B[33m"#x1B[39;49;00m#x1B[33mconfig#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m] = config#x1B[90m#x1B[39;49;00m
config.update(cparams.pop(#x1B[33m"#x1B[39;49;00m#x1B[33murl_config#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, {}))#x1B[90m#x1B[39;49;00m
#x1B[90m#x1B[39;49;00m
ext = {k: config.pop(k) #x1B[94mfor#x1B[39;49;00m k #x1B[95min#x1B[39;49;00m #x1B[96mlist#x1B[39;49;00m(config) #x1B[94mif#x1B[39;49;00m k #x1B[95mnot#x1B[39;49;00m #x1B[95min#x1B[39;49;00m core_keys}#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m supports_user_agent:#x1B[90m#x1B[39;49;00m
user_agent = #x1B[33mf#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mduckdb_engine/#x1B[39;49;00m#x1B[33m{#x1B[39;49;00m__version__#x1B[33m}#x1B[39;49;00m#x1B[33m(sqlalchemy/#x1B[39;49;00m#x1B[33m{#x1B[39;49;00msqlalchemy_version#x1B[33m}#x1B[39;49;00m#x1B[33m)#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m #x1B[33m"#x1B[39;49;00m#x1B[33mcustom_user_agent#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m #x1B[95min#x1B[39;49;00m config:#x1B[90m#x1B[39;49;00m
user_agent = #x1B[33mf#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m{#x1B[39;49;00muser_agent#x1B[33m}#x1B[39;49;00m#x1B[33m #x1B[39;49;00m#x1B[33m{#x1B[39;49;00mconfig[#x1B[33m'#x1B[39;49;00m#x1B[33mcustom_user_agent#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m]#x1B[33m}#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
config[#x1B[33m"#x1B[39;49;00m#x1B[33mcustom_user_agent#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m] = user_agent#x1B[90m#x1B[39;49;00m
#x1B[90m#x1B[39;49;00m
conn = duckdb.connect(*cargs, **cparams)#x1B[90m#x1B[39;49;00m
#x1B[90m#x1B[39;49;00m
#x1B[94mfor#x1B[39;49;00m extension #x1B[95min#x1B[39;49;00m preload_extensions:#x1B[90m#x1B[39;49;00m
> conn.execute(#x1B[33mf#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mLOAD #x1B[39;49;00m#x1B[33m{#x1B[39;49;00mextension#x1B[33m}#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE duckdb.duckdb.IOException: IO Error: Extension "/home/runner/.duckdb/extensions/bcd65821a9/linux_amd64_gcc4/httpfs.duckdb_extension" could not be loaded because its signature is either missing or invalid and unsigned extensions are disabled by configuration (allow_unsigned_extensions)#x1B[0m
#x1B[1m#x1B[31mduckdb_engine/__init__.py#x1B[0m:288: IOException
#x1B[33mThe above exception was the direct cause of the following exception:#x1B[0m
#x1B[0m#x1B[37m@mark#x1B[39;49;00m.skipif(os.uname().machine == #x1B[33m"#x1B[39;49;00m#x1B[33maarch64#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, reason=#x1B[33m"#x1B[39;49;00m#x1B[33mnot supported on aarch64#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
#x1B[37m@mark#x1B[39;49;00m.remote_data#x1B[90m#x1B[39;49;00m
#x1B[94mdef#x1B[39;49;00m #x1B[92mtest_preload_extension#x1B[39;49;00m() -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
duckdb.connect().execute(#x1B[33m"#x1B[39;49;00m#x1B[33mINSTALL httpfs#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
engine = create_engine(#x1B[90m#x1B[39;49;00m
#x1B[33m"#x1B[39;49;00m#x1B[33mduckdb:///#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
connect_args={#x1B[90m#x1B[39;49;00m
#x1B[33m"#x1B[39;49;00m#x1B[33mpreload_extensions#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m: [#x1B[33m"#x1B[39;49;00m#x1B[33mhttpfs#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m],#x1B[90m#x1B[39;49;00m
#x1B[33m"#x1B[39;49;00m#x1B[33mconfig#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m: {#x1B[33m"#x1B[39;49;00m#x1B[33ms3_region#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m: #x1B[33m"#x1B[39;49;00m#x1B[33map-southeast-2#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33ms3_use_ssl#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m: #x1B[94mTrue#x1B[39;49;00m},#x1B[90m#x1B[39;49;00m
},#x1B[90m#x1B[39;49;00m
)#x1B[90m#x1B[39;49;00m
#x1B[90m#x1B[39;49;00m
#x1B[90m# check that we get an error indicating that the extension was loaded#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
> #x1B[94mwith#x1B[39;49;00m engine.connect() #x1B[94mas#x1B[39;49;00m conn, raises(#x1B[96mException#x1B[39;49;00m, match=#x1B[33m"#x1B[39;49;00m#x1B[33mHTTP HEAD#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mduckdb_engine/tests/test_basic.py#x1B[0m:271:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/engine/base.py#x1B[0m:3325: in connect
#x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._connection_cls(#x1B[96mself#x1B[39;49;00m, close_with_result=close_with_result)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/engine/base.py#x1B[0m:96: in __init__
#x1B[0m#x1B[94melse#x1B[39;49;00m engine.raw_connection()#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/engine/base.py#x1B[0m:3404: in raw_connection
#x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._wrap_pool_connect(#x1B[96mself#x1B[39;49;00m.pool.connect, _connection)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/engine/base.py#x1B[0m:3374: in _wrap_pool_connect
#x1B[0mConnection._handle_dbapi_exception_noconnection(#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/engine/base.py#x1B[0m:2208: in _handle_dbapi_exception_noconnection
#x1B[0mutil.raise_(#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/util/compat.py#x1B[0m:211: in raise_
#x1B[0m#x1B[94mraise#x1B[39;49;00m exception#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/engine/base.py#x1B[0m:3371: in _wrap_pool_connect
#x1B[0m#x1B[94mreturn#x1B[39;49;00m fn()#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/pool/base.py#x1B[0m:327: in connect
#x1B[0m#x1B[94mreturn#x1B[39;49;00m _ConnectionFairy._checkout(#x1B[96mself#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/pool/base.py#x1B[0m:894: in _checkout
#x1B[0mfairy = _ConnectionRecord.checkout(pool)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/pool/base.py#x1B[0m:493: in checkout
#x1B[0mrec = pool._do_get()#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/pool/impl.py#x1B[0m:146: in _do_get
#x1B[0m#x1B[96mself#x1B[39;49;00m._dec_overflow()#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py#x1B[0m:70: in __exit__
#x1B[0mcompat.raise_(#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/util/compat.py#x1B[0m:211: in raise_
#x1B[0m#x1B[94mraise#x1B[39;49;00m exception#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/pool/impl.py#x1B[0m:143: in _do_get
#x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._create_connection()#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/pool/base.py#x1B[0m:273: in _create_connection
#x1B[0m#x1B[94mreturn#x1B[39;49;00m _ConnectionRecord(#x1B[96mself#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/pool/base.py#x1B[0m:388: in __init__
#x1B[0m#x1B[96mself#x1B[39;49;00m.__connect()#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/pool/base.py#x1B[0m:691: in __connect
#x1B[0mpool.logger.debug(#x1B[33m"#x1B[39;49;00m#x1B[33mError on connect(): #x1B[39;49;00m#x1B[33m%s#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, e)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py#x1B[0m:70: in __exit__
#x1B[0mcompat.raise_(#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/util/compat.py#x1B[0m:211: in raise_
#x1B[0m#x1B[94mraise#x1B[39;49;00m exception#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/pool/base.py#x1B[0m:686: in __connect
#x1B[0m#x1B[96mself#x1B[39;49;00m.dbapi_connection = connection = pool._invoke_creator(#x1B[96mself#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31m.nox/nightly-3-8/lib/python3.8/site-packages/sqlalchemy/engine/create.py#x1B[0m:574: in connect
#x1B[0m#x1B[94mreturn#x1B[39;49;00m dialect.connect(*cargs, **cparams)#x1B[90m#x1B[39;49;00m
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <duckdb_engine.Dialect object at 0x7fa01c50c9a0>, cargs = ()
cparams = {'config': {'custom_user_agent': 'duckdb_engine/0.13.7-pre0(sqlalchemy/1.4.54)'}}
preload_extensions = ['httpfs']
ext = {'s3_region': 'ap-southeast-2', 's3_use_ssl': True}
user_agent = 'duckdb_engine/0.13.7-pre0(sqlalchemy/1.4.54)'
conn = <duckdb.duckdb.DuckDBPyConnection object at 0x7fa018c5eeb0>
extension = 'httpfs'
#x1B[0m#x1B[94mdef#x1B[39;49;00m #x1B[92mconnect#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m, *cargs: Any, **cparams: Any) -> #x1B[33m"#x1B[39;49;00m#x1B[33mConnection#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
core_keys = get_core_config()#x1B[90m#x1B[39;49;00m
preload_extensions = cparams.pop(#x1B[33m"#x1B[39;49;00m#x1B[33mpreload_extensions#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, [])#x1B[90m#x1B[39;49;00m
config = #x1B[96mdict#x1B[39;49;00m(cparams.get(#x1B[33m"#x1B[39;49;00m#x1B[33mconfig#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, {}))#x1B[90m#x1B[39;49;00m
cparams[#x1B[33m"#x1B[39;49;00m#x1B[33mconfig#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m] = config#x1B[90m#x1B[39;49;00m
config.update(cparams.pop(#x1B[33m"#x1B[39;49;00m#x1B[33murl_config#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, {}))#x1B[90m#x1B[39;49;00m
#x1B[90m#x1B[39;49;00m
ext = {k: config.pop(k) #x1B[94mfor#x1B[39;49;00m k #x1B[95min#x1B[39;49;00m #x1B[96mlist#x1B[39;49;00m(config) #x1B[94mif#x1B[39;49;00m k #x1B[95mnot#x1B[39;49;00m #x1B[95min#x1B[39;49;00m core_keys}#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m supports_user_agent:#x1B[90m#x1B[39;49;00m
user_agent = #x1B[33mf#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mduckdb_engine/#x1B[39;49;00m#x1B[33m{#x1B[39;49;00m__version__#x1B[33m}#x1B[39;49;00m#x1B[33m(sqlalchemy/#x1B[39;49;00m#x1B[33m{#x1B[39;49;00msqlalchemy_version#x1B[33m}#x1B[39;49;00m#x1B[33m)#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[94mif#x1B[39;49;00m #x1B[33m"#x1B[39;49;00m#x1B[33mcustom_user_agent#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m #x1B[95min#x1B[39;49;00m config:#x1B[90m#x1B[39;49;00m
user_agent = #x1B[33mf#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m{#x1B[39;49;00muser_agent#x1B[33m}#x1B[39;49;00m#x1B[33m #x1B[39;49;00m#x1B[33m{#x1B[39;49;00mconfig[#x1B[33m'#x1B[39;49;00m#x1B[33mcustom_user_agent#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m]#x1B[33m}#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
config[#x1B[33m"#x1B[39;49;00m#x1B[33mcustom_user_agent#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m] = user_agent#x1B[90m#x1B[39;49;00m
#x1B[90m#x1B[39;49;00m
conn = duckdb.connect(*cargs, **cparams)#x1B[90m#x1B[39;49;00m
#x1B[90m#x1B[39;49;00m
#x1B[94mfor#x1B[39;49;00m extension #x1B[95min#x1B[39;49;00m preload_extensions:#x1B[90m#x1B[39;49;00m
> conn.execute(#x1B[33mf#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mLOAD #x1B[39;49;00m#x1B[33m{#x1B[39;49;00mextension#x1B[33m}#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE sqlalchemy.exc.OperationalError: (duckdb.duckdb.IOException) IO Error: Extension "/home/runner/.duckdb/extensions/bcd65821a9/linux_amd64_gcc4/httpfs.duckdb_extension" could not be loaded because its signature is either missing or invalid and unsigned extensions are disabled by configuration (allow_unsigned_extensions)#x1B[0m
#x1B[1m#x1B[31mE (Background on this error at: https://sqlalche.me/e/14/e3q8)#x1B[0m
#x1B[1m#x1B[31mduckdb_engine/__init__.py#x1B[0m:288: OperationalError
Loading