Skip to content
Draft
Show file tree
Hide file tree
Changes from all 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
8 changes: 7 additions & 1 deletion modelbaker/iliwrapper/ili2dbconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,7 @@ def __init__(self, other: Optional[Ili2DbCommandConfiguration] = None):
self.pre_script = ""
self.post_script = ""
self.name_lang = ""
self.enum_tabs = "tabsid" # "tabs","singletabs"

def to_ili2db_args(
self, extra_args: list[str] = [], with_action: bool = True
Expand Down Expand Up @@ -309,7 +310,12 @@ def to_ili2db_args(

if self.db_ili_version is None or self.db_ili_version > 3:
self.append_args(args, ["--createTypeConstraint"], True)
self.append_args(args, ["--createEnumTabsWithId"], True)
if self.enum_tabs == "tabs":
self.append_args(args, ["--createEnumTabs"], True)
elif self.enum_tabs == "singletabs":
self.append_args(args, ["--createSingleEnumTab"], True)
else:
self.append_args(args, ["--createEnumTabsWithId"], True)
self.append_args(args, ["--createTidCol"], True)
else:
# version 3 backwards compatibility (not needed in newer versions)
Expand Down
307 changes: 307 additions & 0 deletions tests/test_domain_class_relations.py
Original file line number Diff line number Diff line change
Expand Up @@ -4086,6 +4086,313 @@ def test_widgets_for_domain_geopackage(self):

assert count == 1

def test_enumtabsid_for_domain_postgis(self):
# Schema Import
importer = iliimporter.Importer()
importer.tool = DbIliMode.ili2pg
importer.configuration = iliimporter_config(importer.tool, "ilimodels")
importer.configuration.ilimodels = "Colors_V2"
importer.configuration.dbschema = "colors_v2_{:%Y%m%d%H%M%S%f}".format(
datetime.datetime.now()
)
importer.configuration.inheritance = "smart2"
importer.configuration.create_basket_col = False
importer.stdout.connect(self.print_info)
importer.stderr.connect(self.print_error)
assert importer.run() == iliimporter.Importer.SUCCESS

generator = Generator(
DbIliMode.ili2pg,
get_pg_connection_string(),
importer.configuration.inheritance,
importer.configuration.dbschema,
)

available_layers = generator.layers()
relations, _ = generator.relations(available_layers)

legend = generator.legend(available_layers)

project = Project()
project.layers = available_layers
project.relations = relations
project.legend = legend
project.post_generate()

qgis_project = QgsProject.instance()
project.create(None, qgis_project)

count = 0
for layer in available_layers:
if layer.name == "BaseColor":
field = layer.layer.fields().field("colortype")
type = field.editorWidgetSetup().type()
self.assertEqual(type, "ValueRelation")

config = field.editorWidgetSetup().config()
# to do: there should be something - but it's not filtered at all
# assert (
# config["FilterExpression"]
# == "\"thisclass\" = 'Colors.DomBaseColorType'"
# )
count += 1

if layer.name == "ChildColor":
field = layer.layer.fields().field("colortype")
type = field.editorWidgetSetup().type()
self.assertEqual(type, "ValueRelation")

config = field.editorWidgetSetup().config()
assert (
config["FilterExpression"]
== "\"thisclass\" = 'Colors.DomChildColorType'"
)
count += 1

if layer.name == "AnotherChildColor":
field = layer.layer.fields().field("colortype")
type = field.editorWidgetSetup().type()
self.assertEqual(type, "ValueRelation")

config = field.editorWidgetSetup().config()
assert (
config["FilterExpression"]
== "\"thisclass\" = 'Colors.DomAnotherChildColorType'"
)
count += 1
assert count == 3

def test_enumtabsid_for_domain_geopackage(self):
# Schema Import
importer = iliimporter.Importer()
importer.tool = DbIliMode.ili2gpkg
importer.configuration = iliimporter_config(importer.tool, "ilimodels")
importer.configuration.ilimodels = "Colors_V2"
importer.configuration.dbfile = os.path.join(
self.basetestpath,
"colors_v2_{:%Y%m%d%H%M%S%f}.gpkg".format(datetime.datetime.now()),
)
importer.configuration.inheritance = "smart2"
importer.configuration.create_basket_col = False
importer.stdout.connect(self.print_info)
importer.stderr.connect(self.print_error)
assert importer.run() == iliimporter.Importer.SUCCESS

config_manager = GpkgCommandConfigManager(importer.configuration)
uri = config_manager.get_uri()

generator = Generator(
DbIliMode.ili2gpkg, uri, importer.configuration.inheritance
)

available_layers = generator.layers()
relations, _ = generator.relations(available_layers)

legend = generator.legend(available_layers)

project = Project()
project.layers = available_layers
project.relations = relations
project.legend = legend
project.post_generate()

qgis_project = QgsProject.instance()
project.create(None, qgis_project)

count = 0
for layer in available_layers:
if layer.name == "BaseColor":
field = layer.layer.fields().field("colortype")
type = field.editorWidgetSetup().type()
self.assertEqual(type, "ValueRelation")

config = field.editorWidgetSetup().config()
# to do: there should be something - but it's not filtered at all
# assert (
# config["FilterExpression"]
# == "\"thisclass\" = 'Colors.DomBaseColorType'"
# )
count += 1

if layer.name == "ChildColor":
field = layer.layer.fields().field("colortype")
type = field.editorWidgetSetup().type()
self.assertEqual(type, "ValueRelation")

config = field.editorWidgetSetup().config()
assert (
config["FilterExpression"]
== "\"thisclass\" = 'Colors.DomChildColorType'"
)
count += 1

if layer.name == "AnotherChildColor":
field = layer.layer.fields().field("colortype")
type = field.editorWidgetSetup().type()
self.assertEqual(type, "ValueRelation")

config = field.editorWidgetSetup().config()
assert (
config["FilterExpression"]
== "\"thisclass\" = 'Colors.DomAnotherChildColorType'"
)
count += 1
assert count == 3

def test_enumtabs_for_domain_postgis(self):
# Schema Import
importer = iliimporter.Importer()
importer.tool = DbIliMode.ili2pg
importer.configuration = iliimporter_config(importer.tool, "ilimodels")
importer.configuration.ilimodels = "Colors_V2"
importer.configuration.dbschema = "colors_v2_{:%Y%m%d%H%M%S%f}".format(
datetime.datetime.now()
)
importer.configuration.inheritance = "smart2"
importer.configuration.create_basket_col = False
# createEnumTabs
importer.configuration.enum_tabs = "tabs"
importer.stdout.connect(self.print_info)
importer.stderr.connect(self.print_error)
assert importer.run() == iliimporter.Importer.SUCCESS

generator = Generator(
DbIliMode.ili2pg,
get_pg_connection_string(),
importer.configuration.inheritance,
importer.configuration.dbschema,
)

available_layers = generator.layers()
relations, _ = generator.relations(available_layers)

legend = generator.legend(available_layers)

project = Project()
project.layers = available_layers
project.relations = relations
project.legend = legend
project.post_generate()

qgis_project = QgsProject.instance()
project.create(None, qgis_project)

def test_enumtabs_for_domain_geopackage(self):
# Schema Import
importer = iliimporter.Importer()
importer.tool = DbIliMode.ili2gpkg
importer.configuration = iliimporter_config(importer.tool, "ilimodels")
importer.configuration.ilimodels = "Colors_V2"
importer.configuration.dbfile = os.path.join(
self.basetestpath,
"colors_v2_{:%Y%m%d%H%M%S%f}.gpkg".format(datetime.datetime.now()),
)
importer.configuration.inheritance = "smart2"
importer.configuration.create_basket_col = False
# createEnumTabs
importer.configuration.enum_tabs = "tabs"
importer.stdout.connect(self.print_info)
importer.stderr.connect(self.print_error)
assert importer.run() == iliimporter.Importer.SUCCESS

config_manager = GpkgCommandConfigManager(importer.configuration)
uri = config_manager.get_uri()

generator = Generator(
DbIliMode.ili2gpkg, uri, importer.configuration.inheritance
)

available_layers = generator.layers()
relations, _ = generator.relations(available_layers)

legend = generator.legend(available_layers)

project = Project()
project.layers = available_layers
project.relations = relations
project.legend = legend
project.post_generate()

qgis_project = QgsProject.instance()
project.create(None, qgis_project)

def test_enumsingletab_for_domain_postgis(self):
# Schema Import
importer = iliimporter.Importer()
importer.tool = DbIliMode.ili2pg
importer.configuration = iliimporter_config(importer.tool, "ilimodels")
importer.configuration.ilimodels = "Colors_V2"
importer.configuration.dbschema = "colors_v2_{:%Y%m%d%H%M%S%f}".format(
datetime.datetime.now()
)
importer.configuration.inheritance = "smart2"
importer.configuration.create_basket_col = False
# createSingleEnumTab
importer.configuration.enum_tabs = "singletabs"
importer.stdout.connect(self.print_info)
importer.stderr.connect(self.print_error)
assert importer.run() == iliimporter.Importer.SUCCESS

generator = Generator(
DbIliMode.ili2pg,
get_pg_connection_string(),
importer.configuration.inheritance,
importer.configuration.dbschema,
)

available_layers = generator.layers()
relations, _ = generator.relations(available_layers)

legend = generator.legend(available_layers)

project = Project()
project.layers = available_layers
project.relations = relations
project.legend = legend
project.post_generate()

qgis_project = QgsProject.instance()
project.create(None, qgis_project)

def test_enumsingletab_for_domain_geopackage(self):
# Schema Import
importer = iliimporter.Importer()
importer.tool = DbIliMode.ili2gpkg
importer.configuration = iliimporter_config(importer.tool, "ilimodels")
importer.configuration.ilimodels = "Colors_V2"
importer.configuration.dbfile = os.path.join(
self.basetestpath,
"colors_v2_{:%Y%m%d%H%M%S%f}.gpkg".format(datetime.datetime.now()),
)
importer.configuration.inheritance = "smart2"
importer.configuration.create_basket_col = False
# createSingleEnumTab
importer.configuration.enum_tabs = "singletabs"
importer.stdout.connect(self.print_info)
importer.stderr.connect(self.print_error)
assert importer.run() == iliimporter.Importer.SUCCESS

config_manager = GpkgCommandConfigManager(importer.configuration)
uri = config_manager.get_uri()

generator = Generator(
DbIliMode.ili2gpkg, uri, importer.configuration.inheritance
)

available_layers = generator.layers()
relations, _ = generator.relations(available_layers)

legend = generator.legend(available_layers)

project = Project()
project.layers = available_layers
project.relations = relations
project.legend = legend
project.post_generate()

qgis_project = QgsProject.instance()
project.create(None, qgis_project)

def print_info(self, text):
logging.info(text)

Expand Down
51 changes: 51 additions & 0 deletions tests/testdata/ilimodels/ColorsParentChildDomain_V2.ili
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
INTERLIS 2.3;

MODEL Colors_V2 (es)
AT "mailto:PC-1@localhost"
VERSION "2020-08-26" =

DOMAIN

DomBaseColorType = (
Green,
Red,
Blue
);

DomChildColorType
EXTENDS DomBaseColorType = (
Blue(
Dark_Blue,
Light_Blue,
Medium_Blue
)
);

DomAnotherChildColorType
EXTENDS DomBaseColorType = (
Green(
Dark_Green,
Light_Green,
Medium_Green
)
);

TOPIC Colors =

CLASS BaseColor =
ColorType : Colors_V2.DomBaseColorType;
END BaseColor;

CLASS ChildColor
EXTENDS BaseColor =
ColorType (EXTENDED) : Colors_V2.DomChildColorType;
END ChildColor;

CLASS AnotherChildColor
EXTENDS BaseColor =
ColorType (EXTENDED) : Colors_V2.DomAnotherChildColorType;
END AnotherChildColor;

END Colors;

END Colors_V2.
Loading