""" Service GMS/thematic/calls/createTablePG to create table in PostgreSQL """ from monitorT.task import Task from MG.tools.postgis_api import * from tools.layer import Layer, OutLayer class TaskCustom(Task): """ clase interna itasker """ CONTROL = True def set_up(self): self.FLAG_PAUSE = False self.FLAG_CANCEL = False def cancel(self): self.FLAG_CANCEL = False def pause(self): self.FLAG_PAUSE = False def start(self): self.FLAG_start = False def post(task, user=None, output_layer: OutLayer = None, geomType=None, validate=None): """ Creación de una Tabla en Postgres. La tabla se creará en función del tipo de geometría espeficicada. Parameters ---------- user: str User ID output_layer: dict Diccionario con las especificaciones de la tabla de salida. geomType: str Cadena de caracteres para definir el tipo de geometría. Punto, Linea, Polígono o Temática validate: boolean Dato Booleano para indicar si la tabla tendrá identificador para validación o no. Returns ------- output_layer: OutLayer """ task.set_progress(5) task.status_description = 'cargando capa' flag = 999 intPG = PostGis('public') try: output_layer.parameters["domain"] if output_layer.parameters["domain"] is False: flag = 1 else: flag = 0 except: pass if flag == 0: if output_layer.parameters["domain"] == "SRM": output_layer.parameters['domain'] = False output_layer.parameters['ip'] = intPG.ip output_layer.parameters['port'] = intPG.port output_layer.parameters['user'] = intPG.user output_layer.parameters['password'] = intPG.passw output_layer.parameters['database_name'] = intPG.dbname_colaborative output_layer.parameters['schema'] = intPG.schema_colaborative output_layer.cloud_parameters['ip'] = intPG.ip output_layer.cloud_parameters['port'] = intPG.port output_layer.cloud_parameters['database_name'] = intPG.dbname_colaborative output_layer.cloud_parameters['user'] = intPG.user output_layer.cloud_parameters['password'] = intPG.passw output_layer.cloud_parameters['schema'] = intPG.schema_colaborative extPG = External_PostGis(output_layer.parameters['ip'], output_layer.parameters['port'], output_layer.parameters['user'], output_layer.parameters['password'], output_layer.parameters['database_name'], output_layer.parameters['schema'], output_layer.parameters['table_view_name']) extPG.send_sql_command(""" CREATE SCHEMA IF NOT EXISTS "{}"; """.format(output_layer['schema'])) else: extPG = External_PostGis(output_layer.parameters['domain'], output_layer.parameters['port'], output_layer.parameters['user'], output_layer.parameters['password'], output_layer.parameters['database_name'], output_layer.parameters['schema'], output_layer.parameters['table_view_name']) else: extPG = External_PostGis(output_layer['ip'], output_layer['port'], output_layer['user'], output_layer['password'], output_layer['database_name'], output_layer['schema'], output_layer['table_view_name']) listTablesPG = extPG.send_sql_command(""" SELECT table_name FROM information_schema.tables WHERE table_schema = '{}'; """.format(output_layer['schema'])) listTables = [] for i in listTablesPG: listTables.append(i[0]) if output_layer['table_view_name'] in listTables: raise NameError("La tabla ya existe") PostGis('public').delete_tables(user, output_layer['table_view_name']) epsg_init = 4326 try: if geomType == "point": if validate is True or validate == 'true': PostGis('public').send_sql_command(""" create table "{user}"."{table}" (id_srm serial primary key, srm_validation BOOL DEFAULT '0', geom geometry(Point,{srid}) ); """.format(user=user, table=output_layer['table_view_name'], srid=epsg_init)) PostGis('public').send_sql_command(""" ALTER TABLE "{user}"."{table}" ALTER COLUMN srm_validation SET DEFAULT FALSE; """.format(user=user, table=output_layer['table_view_name'])) else: PostGis('public').send_sql_command(""" create table "{user}"."{table}" (id_srm serial primary key, geom geometry(Point,{srid}) ); """.format(user=user, table=output_layer['table_view_name'], srid=epsg_init)) elif geomType == "line": if validate is True or validate == 'true': PostGis('public').send_sql_command(""" create table "{user}"."{table}" (id_srm serial primary key, srm_validation BOOL NOT NULL DEFAULT false, geom geometry(linestring,{srid}) ); """.format(user=user, table=output_layer['table_view_name'], srid=epsg_init)) else: PostGis('public').send_sql_command(""" create table "{user}"."{table}" (id_srm serial primary key, geom geometry(linestring,{srid}) ); """.format(user=user, table=output_layer['table_view_name'], srid=epsg_init)) elif geomType == "polygon": if validate is True or validate == 'true': PostGis('public').send_sql_command(""" create table "{user}"."{table}" (id_srm serial primary key, srm_validation BOOL NOT NULL DEFAULT false, geom geometry(polygon,{srid}) ); """.format(user=user, table=output_layer['table_view_name'], srid=epsg_init)) else: PostGis('public').send_sql_command(""" create table "{user}"."{table}" (id_srm serial primary key, geom geometry(polygon,{srid}) ); """.format(user=user, table=output_layer['table_view_name'], srid=epsg_init)) # These are the new lines about thematic tables! elif geomType == "thematic": if validate is True or validate == 'true': PostGis('public').send_sql_command(""" create table "{user}"."{table}" (id_srm serial primary key, srm_validation BOOL NOT NULL DEFAULT false); """.format( user=user, table=output_layer['table_view_name'])) else: PostGis('public').send_sql_command(""" create table "{user}"."{table}" (id_srm serial primary key); """.format( user=user, table=output_layer['table_view_name'])) except geomType == "polygon": raise error task.set_progress(95) task.status_description = 'Terminando' output_layer.attach_sources([output_layer['table_view_name']]) return output_layer