pycsw icon indicating copy to clipboard operation
pycsw copied to clipboard

sqlite3 connection on Windows: TypeError: declarative_base() got an unexpected keyword argument 'bind'

Open jmckenna opened this issue 1 year ago • 2 comments

Description

A previous pycsw build on Windows, pycsw-2.6.0, had no problems connecting to an SQLite3 repo, such as:

database=sqlite:///C:\\ms4w\\apps\\pycsw-2.6.0\\tests\\functionaltests\\suites\\cite\\data\\cite.db

However with master (and obviously many updated libs underneath), with the same connection in the .yml file:

database: 'sqlite:///C:\\ms4w\\apps\\pycsw-git-master\\tests\\functionaltests\\suites\\cite\\data\\cite.db'

caused error of Could not initialize repository. Check server logs and more specifically: TypeError: declarative_base() got an unexpected keyword argument 'bind'

Traceback

[2024-09-10T09:53:47Z] {C:\ms4w\Python\Lib\site-packages\pycsw\core\repository.py:72} INFO - creating new engine: sqlite:///C:\\ms4w\\apps\\pycsw-git-master\\tests\\functionaltests\\suites\\cite\\data\\cite.db
[2024-09-10T09:53:47Z] {C:\ms4w\Python\Lib\site-packages\pycsw\server.py:430} ERROR - Could not load repository (local): cannot access local variable 'err' where it is not associated with a value
Traceback (most recent call last):
  File "C:\ms4w\Python\Lib\site-packages\pycsw\server.py", line 415, in dispatch
    self.repository = repository.Repository(
                      ^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ms4w\Python\Lib\site-packages\pycsw\core\repository.py", line 106, in __init__
    base = declarative_base(bind=self.engine)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<string>", line 2, in declarative_base
  File "C:\ms4w\Python\Lib\site-packages\sqlalchemy\util\deprecations.py", line 386, in warned
    return fn(*args, **kwargs)  # type: ignore[no-any-return]
           ^^^^^^^^^^^^^^^^^^^
  File "C:\ms4w\Python\Lib\site-packages\sqlalchemy\ext\declarative\__init__.py", line 27, in declarative_base
    return _declarative_base(*arg, **kw)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: declarative_base() got an unexpected keyword argument 'bind'

Workaround

I noticed that the SQLAlchemy 2.0 release had some changes in regards to declarative_base(), so I uninstalled SQLAlchemy 2.0.34, and installed 1.4.54, and the problem went away.

Environment

  • operating system: Windows
  • Python version: 3.12.5
  • pycsw version: today's master, built from source
  • web server
    • testing with CGI, and mod_wsgi (both successful, after workaround here) through Apache

( tackled during my battles with https://github.com/geopython/pycsw/issues/720 )

cc @tchaddad

jmckenna avatar Sep 10 '24 14:09 jmckenna