Skip to content

Commit c9717cd

Browse files
committed
sync
1 parent 76bc0a2 commit c9717cd

1 file changed

Lines changed: 33 additions & 18 deletions

File tree

cfxdb/exporter.py

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -216,13 +216,25 @@ def export_database(self, filename, include_indexes=False, include_schemata=None
216216
click.style('{}.{}'.format(schema_name, table_name), fg='white', bold=True),
217217
click.style(str(cnt) + ' records', fg='yellow')))
218218

219-
def import_database(self, filename, include_indexes=True):
219+
def import_database(self, filename, include_indexes=False, include_schemata=None, exclude_tables=None):
220220
"""
221221
222222
:param filename:
223223
:param include_indexes:
224224
:return:
225225
"""
226+
if include_schemata is None:
227+
schemata = sorted(self._schemata.keys())
228+
else:
229+
assert type(include_schemata) == list
230+
schemata = sorted(list(set(include_schemata).intersection(self._schemata.keys())))
231+
232+
if exclude_tables is None:
233+
exclude_tables = set()
234+
else:
235+
assert type(exclude_tables) == list
236+
exclude_tables = set(exclude_tables)
237+
226238
with open(filename, 'rb') as f:
227239
data = f.read()
228240
db_data = cbor2.loads(data)
@@ -232,21 +244,24 @@ def import_database(self, filename, include_indexes=True):
232244
dbpath=self._dbpath, filename=filename, filesize=len(data)))
233245

234246
with self._db.begin(write=True) as txn:
235-
for schema_name in self._schemata:
247+
for schema_name in schemata:
236248
for table_name in self._schema_tables[schema_name]:
237-
table = self._schemata[schema_name].__dict__[table_name]
238-
if not table.is_index() or include_indexes:
239-
if schema_name in db_data and table_name in db_data[schema_name]:
240-
cnt = 0
241-
for key, val in db_data[schema_name][table_name]:
242-
key = table._deserialize_key(key)
243-
val = table.parse(val)
244-
table[txn, key] = val
245-
cnt += 1
246-
if cnt:
247-
print('{:.<52}: {}'.format(
248-
click.style('{}.{}'.format(schema_name, table_name),
249-
fg='white',
250-
bold=True), click.style(str(cnt) + ' records', fg='yellow')))
251-
else:
252-
print('No data to import for {}.{}!'.format(schema_name, table_name))
249+
fq_table_name = '{}.{}'.format(schema_name, table_name)
250+
if fq_table_name not in exclude_tables:
251+
table = self._schemata[schema_name].__dict__[table_name]
252+
if not table.is_index() or include_indexes:
253+
if schema_name in db_data and table_name in db_data[schema_name]:
254+
cnt = 0
255+
for key, val in db_data[schema_name][table_name]:
256+
key = table._deserialize_key(key)
257+
val = table.parse(val)
258+
table[txn, key] = val
259+
cnt += 1
260+
if cnt:
261+
print('{:.<52}: {}'.format(
262+
click.style('{}.{}'.format(schema_name, table_name),
263+
fg='white',
264+
bold=True), click.style(str(cnt) + ' records',
265+
fg='yellow')))
266+
else:
267+
print('No data to import for {}.{}!'.format(schema_name, table_name))

0 commit comments

Comments
 (0)