Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

grass.pygrass: Improve exception handling in Info.open (#1555) #1559

Merged
merged 3 commits into from
Feb 28, 2022
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 21 additions & 2 deletions python/grass/pygrass/vector/abstract.py
Original file line number Diff line number Diff line change
Expand Up @@ -413,14 +413,33 @@ def open(
str_err = "Not able to open the map, C function return %d."
raise OpenError(str_err % openvect)

# Load attribute table for selected layer.
if len(self.dblinks) == 0:
self.layer = layer
self.table = None
self.n_lines = 0
else:
self.layer = self.dblinks.by_layer(layer).layer
self.table = self.dblinks.by_layer(layer).table()
layer_db_link = self.dblinks.by_layer(layer)
if not layer_db_link:
raise LookupError(
"There appears to be no database link for layer %d of <%s>."
% (layer, self.name)
)
wenzeslaus marked this conversation as resolved.
Show resolved Hide resolved
if layer_db_link.layer != layer:
raise RuntimeError(
"The databse link for layer %d of <%s> references layer %d."
% (layer, self.name, layer_db_link.layer)
)
wenzeslaus marked this conversation as resolved.
Show resolved Hide resolved
self.layer = layer
try:
self.table = layer_db_link.table()
except Exception as error:
raise RuntimeError(
"Loading the attribute table for layer %d of <%s> failed."
% (layer, self.name)
) from error
self.n_lines = self.table.n_rows()

self.writeable = self.mapset == utils.getenv("MAPSET")
# Initialize the finder
self.find = {
Expand Down
8 changes: 5 additions & 3 deletions python/grass/pygrass/vector/table.py
Original file line number Diff line number Diff line change
Expand Up @@ -714,9 +714,11 @@ def _get_driver(self):
return decode(self.c_fieldinfo.contents.driver)

def _set_driver(self, driver):
if driver not in ("sqlite", "pg"):
str_err = "Driver not supported, use: %s." % ", ".join(DRIVERS)
raise TypeError(str_err)
if driver not in DRIVERS:
raise NotImplementedError(
Viech marked this conversation as resolved.
Show resolved Hide resolved
"The database driver %s is not supported by PyGRASS, "
"use: %s." % (driver, ", ".join(DRIVERS))
)
self.c_fieldinfo.contents.driver = ReturnString(driver)

driver = property(
Expand Down