Skip to content

Commit 3bca063

Browse files
committed
process_tracker_python-23 Data store initialization thru CLI
✨ CLI can now initialize data store (or drop and recreate) Found the issue to why drop_all and create_all were not working. Needed to include the schema for objects. Working on #23
1 parent ac40871 commit 3bca063

File tree

9 files changed

+192
-112
lines changed

9 files changed

+192
-112
lines changed

process_tracker/cli.py

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,21 @@ def main():
2020
"""
2121

2222

23-
# @main.command()
24-
# @click.option('-o', '--overwrite', default=False, help='Wipe out the current data store and rebuild'
25-
# ', starting from fresh.')
26-
# def setup(overwrite):
27-
# """
28-
# Initialize ProcessTracker's data store with user provided input. If already in place, do nothing unless overwrite
29-
# set to True.
30-
# :return:
31-
# """
32-
# click.echo('Attempting to initialize data store...')
33-
# data_store.initialize_data_store(overwrite=overwrite)
23+
@main.command()
24+
@click.option(
25+
"-o",
26+
"--overwrite",
27+
default=False,
28+
help="Wipe out the current data store and rebuild" ", starting from fresh.",
29+
)
30+
def setup(overwrite=False):
31+
"""
32+
Initialize ProcessTracker's data store with user provided input. If already in place, do nothing unless overwrite
33+
set to True.
34+
:return:
35+
"""
36+
click.echo("Attempting to initialize data store...")
37+
data_store.initialize_data_store(overwrite=overwrite)
3438

3539

3640
# @main.command()

process_tracker/data_store.py

Lines changed: 35 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
]
3535
preload_process_status_types = ["running", "completed", "failed"]
3636
preload_process_types = ["extract", "load"]
37-
preload_system_keys = [{"key": "version", "value": "0.2.0"}]
37+
preload_system_keys = [{"version", "0.2.0"}]
3838

3939
supported_data_stores = ["postgresql", "mysql", "oracle", "mssql", "snowflake"]
4040

@@ -110,63 +110,54 @@ def initialize_data_store(self, overwrite=False):
110110
:type overwrite: bool
111111
"""
112112
self.logger.info("Attempting to initialize Process Tracker data store.")
113+
113114
if overwrite:
114115
self.logger.warn(
115116
"ALERT - DATA STORE TO BE OVERWRITTEN - ALL DATA WILL BE LOST"
116117
)
118+
self.session.commit()
119+
Base.metadata.drop_all(self.engine)
117120

118-
for table in Base.metadata.table_names():
119-
self.logger.info("Table will be deleted: %s" % table)
120-
table.drop(self.engine)
121+
self.session.commit()
122+
self.logger.info("Data store initialization beginning. Creating data store.")
123+
Base.metadata.create_all(self.engine)
121124

122-
version = None
123-
else:
125+
# for table in Base.metadata.sorted_tables:
126+
# self.logger.info("Table will be created: %s" % table)
127+
# table.create(self.engine)
124128

125-
self.logger.debug("Obtaining system version, if exists.")
126-
version = (
127-
self.session.query(System)
128-
.filter(System.system_key == "version")
129-
.first()
130-
)
129+
self.logger.info("Setting up application defaults.")
131130

132-
if version is None:
131+
self.logger.info("Adding error types...")
132+
for error_type in preload_error_types:
133+
self.logger.info("Adding %s" % error_type)
134+
self.get_or_create_item(model=ErrorType, error_type_name=error_type)
133135

134-
self.logger.info(
135-
"Data store initialization beginning. Creating data store."
136+
self.logger.info("Adding extract status types...")
137+
for extract_status_type in preload_extract_status_types:
138+
self.logger.info("Adding %s" % extract_status_type)
139+
self.get_or_create_item(
140+
ExtractStatus, extract_status_name=extract_status_type
136141
)
137-
Base.metadata.create_all(self.engine)
138-
139-
self.logger.info("Setting up application defaults.")
140142

141-
self.logger.info("Adding error types...")
142-
for error_type in preload_error_types:
143-
self.logger.info("Adding %s" % error_type)
144-
self.session.add(ErrorType(error_type_name=error_type))
145-
146-
self.logger.info("Adding extract status types...")
147-
for extract_status_type in preload_extract_status_types:
148-
self.logger.info("Adding %s" % extract_status_type)
149-
self.session.add(ExtractStatus(extract_status_name=extract_status_type))
150-
151-
self.logger.info("Adding process status types...")
152-
for process_status_type in preload_process_status_types:
153-
self.logger.info("Adding %s" % process_status_type)
154-
self.session.add(ProcessStatus(process_status_name=process_status_type))
143+
self.logger.info("Adding process status types...")
144+
for process_status_type in preload_process_status_types:
145+
self.logger.info("Adding %s" % process_status_type)
146+
self.get_or_create_item(
147+
model=ProcessStatus, process_status_name=process_status_type
148+
)
155149

156-
self.logger.info("Adding process types...")
157-
for process_type in preload_process_types:
158-
self.logger.info("Adding %s" % process_type)
159-
self.session.add(ProcessType(process_type_name=process_type))
150+
self.logger.info("Adding process types...")
151+
for process_type in preload_process_types:
152+
self.logger.info("Adding %s" % process_type)
153+
self.get_or_create_item(model=ProcessType, process_type_name=process_type)
160154

161-
self.logger.info("Adding system keys...")
162-
for system_key, value in preload_system_keys:
163-
self.logger.info("Adding %s" % system_key)
164-
self.session.add(System(system_key=system_key, system_value=value))
155+
self.logger.info("Adding system keys...")
156+
for key, value in preload_system_keys:
157+
self.logger.info("Adding %s" % key)
158+
self.get_or_create_item(model=System, system_key=key, system_value=value)
165159

166-
self.session.commit()
167-
else:
168-
self.logger.error("It appears the system has already been setup.")
169-
ClickException("It appears the system has already been setup.").show()
160+
self.session.commit()
170161

171162
self.logger.debug("Finished the initialization check.")
172163

process_tracker/models/actor.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,13 @@
88
class Actor(Base):
99

1010
__tablename__ = "actor_lkup"
11+
__table_args__ = {"schema": "process_tracker"}
1112

12-
actor_id = Column(Integer, Sequence("actor_lkup_actor_id_seq"), primary_key=True)
13+
actor_id = Column(
14+
Integer,
15+
Sequence("actor_lkup_actor_id_seq", schema="process_tracker"),
16+
primary_key=True,
17+
)
1318
actor_name = Column(String(250), nullable=False, unique=True)
1419

1520
def __repr__(self):

process_tracker/models/extract.py

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,12 @@
1313
class ExtractStatus(Base):
1414

1515
__tablename__ = "extract_status_lkup"
16+
__table_args__ = {"schema": "process_tracker"}
1617

1718
extract_status_id = Column(
18-
Integer, Sequence("extract_status_lkup_extract_status_id_seq"), primary_key=True
19+
Integer,
20+
Sequence("extract_status_lkup_extract_status_id_seq", schema="process_tracker"),
21+
primary_key=True,
1922
)
2023
extract_status_name = Column(String(75), nullable=False, unique=True)
2124

@@ -32,14 +35,19 @@ def __repr__(self):
3235
class Extract(Base):
3336

3437
__tablename__ = "extract_tracking"
38+
__table_args__ = {"schema": "process_tracker"}
3539

3640
extract_id = Column(
37-
Integer, Sequence("extract_tracking_extract_id_seq"), primary_key=True
41+
Integer,
42+
Sequence("extract_tracking_extract_id_seq", schema="process_tracker"),
43+
primary_key=True,
3844
)
3945
extract_filename = Column(String(750), nullable=False, unique=True)
40-
extract_location_id = Column(Integer, ForeignKey("location_lkup.location_id"))
46+
extract_location_id = Column(
47+
Integer, ForeignKey("process_tracker.location_lkup.location_id")
48+
)
4149
extract_status_id = Column(
42-
Integer, ForeignKey("extract_status_lkup.extract_status_id")
50+
Integer, ForeignKey("process_tracker.extract_status_lkup.extract_status_id")
4351
)
4452
extract_registration_date_time = Column(
4553
DateTime, nullable=False, default=datetime.now()
@@ -71,12 +79,17 @@ def full_filepath(self):
7179
class ExtractDependency(Base):
7280

7381
__tablename__ = "extract_dependency"
82+
__table_args__ = {"schema": "process_tracker"}
7483

7584
parent_extract_id = Column(
76-
Integer, ForeignKey("extract_tracking.extract_id"), primary_key=True
85+
Integer,
86+
ForeignKey("process_tracker.extract_tracking.extract_id"),
87+
primary_key=True,
7788
)
7889
child_extract_id = Column(
79-
Integer, ForeignKey("extract_tracking.extract_id"), primary_key=True
90+
Integer,
91+
ForeignKey("process_tracker.extract_tracking.extract_id"),
92+
primary_key=True,
8093
)
8194

8295
child_extract = relationship("Extract", foreign_keys=[child_extract_id])
@@ -93,15 +106,20 @@ def __repr__(self):
93106
class ExtractProcess(Base):
94107

95108
__tablename__ = "extract_process_tracking"
109+
__table_args__ = {"schema": "process_tracker"}
96110

97111
extract_tracking_id = Column(
98-
Integer, ForeignKey("extract_tracking.extract_id"), primary_key=True
112+
Integer,
113+
ForeignKey("process_tracker.extract_tracking.extract_id"),
114+
primary_key=True,
99115
)
100116
process_tracking_id = Column(
101-
Integer, ForeignKey("process_tracking.process_tracking_id"), primary_key=True
117+
Integer,
118+
ForeignKey("process_tracker.process_tracking.process_tracking_id"),
119+
primary_key=True,
102120
)
103121
extract_process_status_id = Column(
104-
Integer, ForeignKey("extract_status_lkup.extract_status_id")
122+
Integer, ForeignKey("process_tracker.extract_status_lkup.extract_status_id")
105123
)
106124
extract_process_event_date_time = Column(
107125
DateTime, nullable=False, default=datetime.now()
@@ -124,9 +142,12 @@ def __repr__(self):
124142
class LocationType(Base):
125143

126144
__tablename__ = "location_type_lkup"
145+
__table_args__ = {"schema": "process_tracker"}
127146

128147
location_type_id = Column(
129-
Integer, Sequence("location_type_lkup_location_type_id_seq"), primary_key=True
148+
Integer,
149+
Sequence("location_type_lkup_location_type_id_seq", schema="process_tracker"),
150+
primary_key=True,
130151
)
131152
location_type_name = Column(String(25), unique=True, nullable=False)
132153

@@ -143,13 +164,18 @@ def __repr__(self):
143164
class Location(Base):
144165

145166
__tablename__ = "location_lkup"
167+
__table_args__ = {"schema": "process_tracker"}
146168

147169
location_id = Column(
148-
Integer, Sequence("location_lkup_location_id_seq"), primary_key=True
170+
Integer,
171+
Sequence("location_lkup_location_id_seq", schema="process_tracker"),
172+
primary_key=True,
149173
)
150174
location_name = Column(String(750), nullable=False, unique=True)
151175
location_path = Column(String(750), nullable=False, unique=True)
152-
location_type = Column(Integer, ForeignKey("location_type_lkup.location_type_id"))
176+
location_type = Column(
177+
Integer, ForeignKey("process_tracker.location_type_lkup.location_type_id")
178+
)
153179

154180
extracts = relationship("Extract")
155181

0 commit comments

Comments
 (0)