Skip to content

Commit

Permalink
Ensure we load dependencies when updating cache for new models.
Browse files Browse the repository at this point in the history
  • Loading branch information
coleifer committed May 4, 2018
1 parent c9734fc commit 717ec83
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions playhouse/dataset.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ def update_cache(self, table=None):
dependencies.extend([
related._meta.table_name for _, related, _ in
model_class._meta.model_graph()])
else:
dependencies.extend(self.get_table_dependencies(table))
else:
dependencies = None # Update all tables.
updated = self._introspector.generate_models(
Expand All @@ -92,6 +94,19 @@ def update_cache(self, table=None):
literal_column_names=True)
self._models.update(updated)

def get_table_dependencies(self, table):
stack = [table]
accum = []
seen = set()
while stack:
table = stack.pop()
for fk_meta in self._database.get_foreign_keys(table):
dest = fk_meta.dest_table
if dest not in seen:
stack.append(dest)
accum.append(dest)
return accum

def __enter__(self):
self.connect()
return self
Expand Down

0 comments on commit 717ec83

Please sign in to comment.