Skip to content
Snippets Groups Projects
Commit a5e46d3b authored by jvfpw18's avatar jvfpw18
Browse files

Echo columns from mapping protocol to table_definition

parent e9acccdd
No related branches found
No related tags found
2 merge requests!13v1.1.0,!9Create table with columns information present in table definitions
...@@ -24,6 +24,7 @@ import time ...@@ -24,6 +24,7 @@ import time
import json import json
import re import re
import logging import logging
import jsbeautifier
from sqlalchemy import Table, Column, inspect, Integer, String, Boolean,\ from sqlalchemy import Table, Column, inspect, Integer, String, Boolean,\
PrimaryKeyConstraint, ForeignKeyConstraint, text PrimaryKeyConstraint, ForeignKeyConstraint, text
from sqlalchemy.sql import select, insert, update, delete, func from sqlalchemy.sql import select, insert, update, delete, func
...@@ -306,6 +307,20 @@ class DatabaseTable(Table): ...@@ -306,6 +307,20 @@ class DatabaseTable(Table):
return definitions 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): def load_protocol(self, protocol):
''' '''
Takes a Protocol instance and loads it for further use Takes a Protocol instance and loads it for further use
...@@ -396,18 +411,26 @@ class DatabaseTable(Table): ...@@ -396,18 +411,26 @@ class DatabaseTable(Table):
bind = self.metadata.bind bind = self.metadata.bind
definitions = self.get_definitions() definitions = self.get_definitions()
column_dict = definitions.get('columns')
if not column_dict:
column_dict = {}
for column in self._protocol.get_targets(): for column in self._protocol.get_targets():
try: try:
column = self._protocol.dbcolumn_from_target(column) column = self._protocol.dbcolumn_from_target(column)
except InvalidTargetError: except InvalidTargetError:
continue continue
if column[0] not in column_dict.keys():
column_dict[column[0]] = column[1]
if column[0]: if column[0]:
column[0] = column[0].strip() column[0] = column[0].strip()
column = Column(column[0], get_type(column[1])) column = Column(column[0], get_type(column[1]))
self.append_column(column) self.append_column(column)
definitions['columns'] = column_dict
self.update_defintions(definitions)
primary_key = [self.columns.get(c) for c in definitions['pk']] primary_key = [self.columns.get(c) for c in definitions['pk']]
if primary_key: if primary_key:
self.constraints.add(PrimaryKeyConstraint(*primary_key)) self.constraints.add(PrimaryKeyConstraint(*primary_key))
......
...@@ -5,6 +5,7 @@ ipython==7.5.0 ...@@ -5,6 +5,7 @@ ipython==7.5.0
ipython-genutils==0.2.0 ipython-genutils==0.2.0
isort==4.3.20 isort==4.3.20
jedi==0.13.3 jedi==0.13.3
jsbeautifier==1.10.0
lazy-object-proxy==1.4.1 lazy-object-proxy==1.4.1
manage.py==0.2.10 manage.py==0.2.10
mccabe==0.6.1 mccabe==0.6.1
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment