Mercurial > repos > shellac > sam_consensus_v3
comparison env/bin/dynamodb_dump @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author | shellac |
---|---|
date | Mon, 22 Mar 2021 18:12:50 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4f3585e2f14b |
---|---|
1 #!/Users/cmdms/OneDrive-UOB/Development/Projects/2021/sam-consensus-v3/env/bin/python3 | |
2 | |
3 import argparse | |
4 import errno | |
5 import os | |
6 | |
7 import boto | |
8 from boto.compat import json | |
9 from boto.compat import six | |
10 | |
11 | |
12 DESCRIPTION = """Dump the contents of one or more DynamoDB tables to the local filesystem. | |
13 | |
14 Each table is dumped into two files: | |
15 - {table_name}.metadata stores the table's name, schema and provisioned | |
16 throughput. | |
17 - {table_name}.data stores the table's actual contents. | |
18 | |
19 Both files are created in the current directory. To write them somewhere else, | |
20 use the --out-dir parameter (the target directory will be created if needed). | |
21 """ | |
22 | |
23 | |
24 def dump_table(table, out_dir): | |
25 metadata_file = os.path.join(out_dir, "%s.metadata" % table.name) | |
26 data_file = os.path.join(out_dir, "%s.data" % table.name) | |
27 | |
28 with open(metadata_file, "w") as metadata_fd: | |
29 json.dump( | |
30 { | |
31 "name": table.name, | |
32 "schema": table.schema.dict, | |
33 "read_units": table.read_units, | |
34 "write_units": table.write_units, | |
35 }, | |
36 metadata_fd | |
37 ) | |
38 | |
39 with open(data_file, "w") as data_fd: | |
40 for item in table.scan(): | |
41 # JSON can't serialize sets -- convert those to lists. | |
42 data = {} | |
43 for k, v in six.iteritems(item): | |
44 if isinstance(v, (set, frozenset)): | |
45 data[k] = list(v) | |
46 else: | |
47 data[k] = v | |
48 | |
49 data_fd.write(json.dumps(data)) | |
50 data_fd.write("\n") | |
51 | |
52 | |
53 def dynamodb_dump(tables, out_dir): | |
54 try: | |
55 os.makedirs(out_dir) | |
56 except OSError as e: | |
57 # We don't care if the dir already exists. | |
58 if e.errno != errno.EEXIST: | |
59 raise | |
60 | |
61 conn = boto.connect_dynamodb() | |
62 for t in tables: | |
63 dump_table(conn.get_table(t), out_dir) | |
64 | |
65 | |
66 if __name__ == "__main__": | |
67 parser = argparse.ArgumentParser( | |
68 prog="dynamodb_dump", | |
69 description=DESCRIPTION | |
70 ) | |
71 parser.add_argument("--out-dir", default=".") | |
72 parser.add_argument("tables", metavar="TABLES", nargs="+") | |
73 | |
74 namespace = parser.parse_args() | |
75 | |
76 dynamodb_dump(namespace.tables, namespace.out_dir) |