Bug report #13650
DBManager BaseError should test for already unicode error messages
| Status: | Closed | ||
|---|---|---|---|
| Priority: | Normal | ||
| Assignee: | |||
| Category: | DB Manager | ||
| Affected QGIS version: | master | Regression?: | No |
| Operating System: | all | Easy fix?: | No |
| Pull Request or Patch supplied: | Yes | Resolution: | fixed/implemented |
| Crashes QGIS or corrupts data: | No | Copied to github as #: | 21685 |
Description
Hello,
since 401f43c, there is the following error in the Oracle plugin of DBManager:
Traceback (most recent call last):
File "C:/OSGEO4~1/apps/qgis-dev/./python/plugins\\db_manager\\db_model.py", line 422, in rowCount
self._refreshIndex(parent, True)
File "C:/OSGEO4~1/apps/qgis-dev/./python/plugins\\db_manager\\db_model.py", line 473, in _refreshIndex
if item.populate():
File "C:/OSGEO4~1/apps/qgis-dev/./python/plugins\\db_manager\\db_model.py", line 211, in populate
for t in self.getItemData().tables():
File "C:/OSGEO4~1/apps/qgis-dev/./python/plugins\\db_manager\\db_plugins\\plugin.py", line 563, in tables
return self.database().tables(self)
File "C:/OSGEO4~1/apps/qgis-dev/./python/plugins\\db_manager\\db_plugins\\plugin.py", line 501, in tables
tables = self.connector.getTables(schema.name if schema else None, sys_tables)
File "C:/OSGEO4~1/apps/qgis-dev/./python/plugins\\db_manager\\db_plugins\\oracle\\connector.py", line 332, in getTables
vectors = self.getVectorTables(schema)
File "C:/OSGEO4~1/apps/qgis-dev/./python/plugins\\db_manager\\db_plugins\\oracle\\connector.py", line 631, in getVectorTables
table_name, geocol)
File "C:/OSGEO4~1/apps/qgis-dev/./python/plugins\\db_manager\\db_plugins\\oracle\\connector.py", line 772, in getTableGeomTypes
c = self._execute(None, query)
File "C:/OSGEO4~1/apps/qgis-dev/./python/plugins\\db_manager\\db_plugins\\connector.py", line 83, in _execute
raise DbError(e, sql)
File "C:/OSGEO4~1/apps/qgis-dev/./python/plugins\\db_manager\\db_plugins\\plugin.py", line 63, in __init__
BaseError.__init__(self, e)
File "C:/OSGEO4~1/apps/qgis-dev/./python/plugins\\db_manager\\db_plugins\\plugin.py", line 40, in __init__
msg = unicode(msg, 'utf-8', 'replace') # convert from utf8 and replace errors (if any)
TypeError: decoding Unicode is not supported
and the plugin is broken on the first database error encoutered (because Oracle db_plugin use unicode for error messages).
To fix this, we just need to add a test for unicode (isinstance) in db_plugins/plugin.py:
class BaseError(Exception):
"""Base class for exceptions in the plugin."""
def __init__(self, e):
if isinstance(e, Exception):
msg = e.args[0] if len(e.args) > 0 else ''
else:
msg = e
if not isinstance(msg, unicode):
msg = unicode(msg, 'utf-8', 'replace') # convert from utf8 and replace errors (if any)
As the release date is tomorrow, I think we should really add this fix before...
History
#1
Updated by Médéric RIBREUX about 10 years ago
I've made a PR ...
#2
Updated by Giuseppe Sucameli about 10 years ago
- Status changed from Open to Closed
Fixed in changeset 87657f8ab4121abb93436fcca387354d4dcde51d.
#3
Updated by Giuseppe Sucameli about 10 years ago
- Resolution set to fixed/implemented
Unfortunately my first commit 87657f8 was ugly as I didn't save my changes before commit...
So when I saw your PR, I've merged it (see 339fd75655e). Thanks a lot.