From a5e46d3b2f3dc066da79f7a8b65031ff3d61c34a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Thu, 4 Jul 2019 07:59:09 -0300 Subject: [PATCH] Echo columns from mapping protocol to table_definition --- database/database_table.py | 23 +++++++++++++++++++++++ requirements.txt | 1 + 2 files changed, 24 insertions(+) diff --git a/database/database_table.py b/database/database_table.py index 73cd16a..a48234b 100644 --- a/database/database_table.py +++ b/database/database_table.py @@ -24,6 +24,7 @@ import time import json import re import logging +import jsbeautifier from sqlalchemy import Table, Column, inspect, Integer, String, Boolean,\ PrimaryKeyConstraint, ForeignKeyConstraint, text from sqlalchemy.sql import select, insert, update, delete, func @@ -306,6 +307,20 @@ class DatabaseTable(Table): return definitions + def update_defintions(self, definitions): + ''' + Update the table definitions with an altered definitions object + ''' + logger.debug("Updating table definitions from %s", definitions) + definitions_json = self.name + '.json' + definitions_json = os.path.join(settings.TABLE_DEFINITIONS_FOLDER, definitions_json) + + new_definitions_json = jsbeautifier.beautify(json.dumps(definitions, ensure_ascii=False)) + with open(definitions_json, "w") as def_json: + def_json.write(new_definitions_json) + + logger.debug("Definitions Updated") + def load_protocol(self, protocol): ''' Takes a Protocol instance and loads it for further use @@ -396,18 +411,26 @@ class DatabaseTable(Table): bind = self.metadata.bind definitions = self.get_definitions() + column_dict = definitions.get('columns') + if not column_dict: + column_dict = {} for column in self._protocol.get_targets(): try: column = self._protocol.dbcolumn_from_target(column) except InvalidTargetError: continue + if column[0] not in column_dict.keys(): + column_dict[column[0]] = column[1] if column[0]: column[0] = column[0].strip() column = Column(column[0], get_type(column[1])) self.append_column(column) + definitions['columns'] = column_dict + self.update_defintions(definitions) + primary_key = [self.columns.get(c) for c in definitions['pk']] if primary_key: self.constraints.add(PrimaryKeyConstraint(*primary_key)) diff --git a/requirements.txt b/requirements.txt index 7c18f5d..c3861e1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,6 +5,7 @@ ipython==7.5.0 ipython-genutils==0.2.0 isort==4.3.20 jedi==0.13.3 +jsbeautifier==1.10.0 lazy-object-proxy==1.4.1 manage.py==0.2.10 mccabe==0.6.1 -- GitLab