moin icon indicating copy to clipboard operation
moin copied to clipboard

"moin item-put ... -o" not supported by sql backends

Open RogerHaase opened this issue 2 years ago • 0 comments

/moin/storage/stores sqla.py and sqlite.py lack __updateitem__ methods and do not support overwriting an item using item-put CLI. Attempts to do so cause tracebacks. Workaround is for editors/admins to destroy the old item before using item-put.

    SQLITE

    (moin-venv-python) C:\git\moin>moin item-put -m \git\aa-zip-tar\Home.meta -d \git\aa-zip-tar\Home.data -o
    Traceback (most recent call last):
      File "C:\GIT\moin-venv-python\Scripts\moin-script.py", line 33, in <module>
        sys.exit(load_entry_point('moin', 'console_scripts', 'moin')())
      File "c:\git\moin\src\moin\scripts\__init__.py", line 93, in main
        return manager.run(default_command=default_command)
      File "C:\GIT\moin-venv-python\lib\site-packages\flask_script\__init__.py", line 417, in run
        result = self.handle(argv[0], argv[1:])
      File "C:\GIT\moin-venv-python\lib\site-packages\flask_script\__init__.py", line 386, in handle
        res = handle(*args, **config)
      File "C:\GIT\moin-venv-python\lib\site-packages\flask_script\commands.py", line 216, in __call__
        return self.run(*args, **kwargs)
      File "c:\git\moin\src\moin\scripts\maint\modify_item.py", line 103, in run
        item.store_revision(meta, df, overwrite=overwrite)
      File "c:\git\moin\src\moin\storage\middleware\indexing.py", line 1233, in store_revision
        backend_name, revid = backend.store(meta, data)
      File "c:\git\moin\src\moin\storage\middleware\routing.py", line 132, in store
        revid = backend.store(meta, data)
      File "c:\git\moin\src\moin\storage\backends\stores.py", line 147, in store
        self.data_store[dataid] = tfw
      File "c:\git\moin\src\moin\storage\stores\__init__.py", line 155, in __setitem__
        super(FileMutableStoreMixin, self).__setitem__(key, value)
      File "c:\git\moin\src\moin\storage\stores\sqlite.py", line 120, in __setitem__
        self.conn.execute('insert into {0} values (?, ?)'.format(self.table_name), (key, value))
    sqlite3.IntegrityError: UNIQUE constraint failed: data.key

    (moin-venv-python) C:\git\moin>


    SQLALCHEMY

    (moin-venv-python) C:\git\moin>moin item-put -m \git\aa-zip-tar\Home.meta -d \git\aa-zip-tar\Home.data -o
    Traceback (most recent call last):
      File "C:\GIT\moin-venv-python\lib\site-packages\sqlalchemy\engine\base.py", line 1819, in _execute_context
        self.dialect.do_execute(
      File "C:\GIT\moin-venv-python\lib\site-packages\sqlalchemy\engine\default.py", line 732, in do_execute
        cursor.execute(statement, parameters)
    sqlite3.IntegrityError: UNIQUE constraint failed: store.key

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last):
      File "C:\GIT\moin-venv-python\Scripts\moin-script.py", line 33, in <module>
        sys.exit(load_entry_point('moin', 'console_scripts', 'moin')())
      File "c:\git\moin\src\moin\scripts\__init__.py", line 93, in main
        return manager.run(default_command=default_command)
      File "C:\GIT\moin-venv-python\lib\site-packages\flask_script\__init__.py", line 417, in run
        result = self.handle(argv[0], argv[1:])
      File "C:\GIT\moin-venv-python\lib\site-packages\flask_script\__init__.py", line 386, in handle
        res = handle(*args, **config)
      File "C:\GIT\moin-venv-python\lib\site-packages\flask_script\commands.py", line 216, in __call__
        return self.run(*args, **kwargs)
      File "c:\git\moin\src\moin\scripts\maint\modify_item.py", line 103, in run
        item.store_revision(meta, df, overwrite=overwrite)
      File "c:\git\moin\src\moin\storage\middleware\indexing.py", line 1233, in store_revision
        backend_name, revid = backend.store(meta, data)
      File "c:\git\moin\src\moin\storage\middleware\routing.py", line 132, in store
        revid = backend.store(meta, data)
      File "c:\git\moin\src\moin\storage\backends\stores.py", line 147, in store
        self.data_store[dataid] = tfw
      File "c:\git\moin\src\moin\storage\stores\__init__.py", line 155, in __setitem__
        super(FileMutableStoreMixin, self).__setitem__(key, value)
      File "c:\git\moin\src\moin\storage\stores\sqla.py", line 105, in __setitem__
        self.table.insert().execute(key=key, value=value)
      File "<string>", line 2, in execute
      File "C:\GIT\moin-venv-python\lib\site-packages\sqlalchemy\util\deprecations.py", line 402, in warned
        return fn(*args, **kwargs)
      File "C:\GIT\moin-venv-python\lib\site-packages\sqlalchemy\sql\base.py", line 965, in execute
        return e._execute_clauseelement(
      File "C:\GIT\moin-venv-python\lib\site-packages\sqlalchemy\engine\base.py", line 3203, in _execute_clauseelement
        return connection._execute_clauseelement(
      File "C:\GIT\moin-venv-python\lib\site-packages\sqlalchemy\engine\base.py", line 1498, in _execute_clauseelement
        ret = self._execute_context(
      File "C:\GIT\moin-venv-python\lib\site-packages\sqlalchemy\engine\base.py", line 1862, in _execute_context
        self._handle_dbapi_exception(
      File "C:\GIT\moin-venv-python\lib\site-packages\sqlalchemy\engine\base.py", line 2043, in _handle_dbapi_exception
        util.raise_(
      File "C:\GIT\moin-venv-python\lib\site-packages\sqlalchemy\util\compat.py", line 208, in raise_
        raise exception
      File "C:\GIT\moin-venv-python\lib\site-packages\sqlalchemy\engine\base.py", line 1819, in _execute_context
        self.dialect.do_execute(
      File "C:\GIT\moin-venv-python\lib\site-packages\sqlalchemy\engine\default.py", line 732, in do_execute
        cursor.execute(statement, parameters)
    sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: store.key
    [SQL: INSERT INTO store ("key", value) VALUES (?, ?)]
    [parameters: ('d390f23c2a9d4757a4010ed9e839281e', <memory at 0x000001BA29598040>)]
    (Background on this error at: https://sqlalche.me/e/14/gkpj)

RogerHaase avatar Aug 11 '22 14:08 RogerHaase