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)