forked from ElementsProject/lightning
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdblog.py
executable file
·54 lines (39 loc) · 1.42 KB
/
dblog.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/env python3
"""This plugin is used to check that db_write calls are working correctly.
"""
from pyln.client import Plugin, RpcError
import sqlite3
plugin = Plugin()
plugin.sqlite_pre_init_cmds = []
plugin.initted = False
@plugin.init()
def init(configuration, options, plugin):
if not plugin.get_option('dblog-file'):
raise RpcError("No dblog-file specified")
plugin.conn = sqlite3.connect(plugin.get_option('dblog-file'),
isolation_level=None)
plugin.log("replaying pre-init data:")
plugin.conn.execute("PRAGMA foreign_keys = ON;")
print(plugin.sqlite_pre_init_cmds)
plugin.conn.execute("BEGIN TRANSACTION;")
for c in plugin.sqlite_pre_init_cmds:
plugin.conn.execute(c)
plugin.log("{}".format(c))
plugin.conn.execute("COMMIT;")
plugin.initted = True
plugin.log("initialized {}".format(configuration))
@plugin.hook('db_write')
def db_write(plugin, writes, **kwargs):
if not plugin.initted:
plugin.log("deferring {} commands".format(len(writes)))
plugin.sqlite_pre_init_cmds += writes
else:
print(writes)
plugin.conn.execute("BEGIN TRANSACTION;")
for c in writes:
plugin.conn.execute(c)
plugin.log("{}".format(c))
plugin.conn.execute("COMMIT;")
return {"result": "continue"}
plugin.add_option('dblog-file', None, 'The db file to create.')
plugin.run()