From c0d05f6dde9ed0e7e82f7800a726e3393579b780 Mon Sep 17 00:00:00 2001 From: Felipe Diniz Date: Thu, 7 Oct 2021 09:18:11 -0300 Subject: [PATCH] aumenta flexibilidade do masterfile --- masterfile_schema.json | 37 +++++++++++++++++++++++++++++++++++++ rotinas/mastergen.py | 11 ++++++++--- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/masterfile_schema.json b/masterfile_schema.json index 5da6fc9..b298188 100644 --- a/masterfile_schema.json +++ b/masterfile_schema.json @@ -101,8 +101,45 @@ "type": "integer" }, "minItems": 1 + }, + { + "type": "object", + "properties": { + "MultiPoint": { + "type": "array", + "items": { + "type": "integer" + }, + "minItems": 1 + }, + "MultiLinestring": { + "type": "array", + "items": { + "type": "integer" + }, + "minItems": 1 + }, + "MultiPolygon": { + "type": "array", + "items": { + "type": "integer" + }, + "minItems": 1 + } + }, + "additionalProperties": false } ] + }, + "primitivas": { + "type": "array", + "description": "Lista de geometrias vĂ¡lidas para utilizar esse atributo.", + "items": { + "type": "string", + "enum": ["MultiPoint", "MultiLinestring", "MultiPolygon"] + }, + "minItems": 1, + "uniqueItems": true } }, "required": ["nome", "tipo", "cardinalidade"], diff --git a/rotinas/mastergen.py b/rotinas/mastergen.py index 2344dd5..c2e6479 100644 --- a/rotinas/mastergen.py +++ b/rotinas/mastergen.py @@ -21,7 +21,7 @@ def __init__(self, master_path): # TODO Validate JSON file against JsonSchema pass - def buildSQL(self, dest, atributos_padrao=False, extension_classes=False, uuid = False, owner='postgres'): + def buildSQL(self, dest, atributos_padrao=True, extension_classes=True, uuid = True, owner='postgres'): master = self.master sql = [] sql.append(u"CREATE SCHEMA {0};".format(master["schema_dados"])) @@ -114,6 +114,8 @@ def buildSQL(self, dest, atributos_padrao=False, extension_classes=False, uuid = master["nome_id"])) for atributo in classe["atributos"]: + if "primitivas" in atributo and primitiva not in atributo["primitivas"]: + continue if atributo["cardinalidade"] == "0..1": sql.append(u"\t {0} {1},".format( atributo["nome"], atributo["tipo"])) @@ -143,10 +145,13 @@ def buildSQL(self, dest, atributos_padrao=False, extension_classes=False, uuid = sql.append(u"") for atributo in classe["atributos"]: - + if "primitivas" in atributo and primitiva not in atributo["primitivas"]: + continue if "mapa_valor" in atributo: valores_att = None - if "valores" in atributo and len(atributo["valores"])>0: + if "valores" in atributo and isinstance(atributo["valores"],dict) and primitiva in atributo["valores"]: + valores_att = atributo["valores"][primitiva] + elif "valores" in atributo and len(atributo["valores"])>0: if isinstance(atributo["valores"][0],dict): valores_att = [valor["code"] for valor in atributo["valores"] if ("primitivas" in valor and primitiva in valor["primitivas"]) or "primitivas" not in valor]