moat-kv 0.70.23__py3-none-any.whl → 0.71.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. build/lib/docs/source/conf.py +201 -0
  2. build/lib/examples/pathify.py +45 -0
  3. build/lib/moat/kv/__init__.py +19 -0
  4. build/lib/moat/kv/_cfg.yaml +93 -0
  5. build/lib/moat/kv/_main.py +91 -0
  6. build/lib/moat/kv/actor/__init__.py +98 -0
  7. build/lib/moat/kv/actor/deletor.py +139 -0
  8. build/lib/moat/kv/auth/__init__.py +444 -0
  9. build/lib/moat/kv/auth/_test.py +166 -0
  10. build/lib/moat/kv/auth/password.py +234 -0
  11. build/lib/moat/kv/auth/root.py +58 -0
  12. build/lib/moat/kv/backend/__init__.py +67 -0
  13. build/lib/moat/kv/backend/mqtt.py +71 -0
  14. build/lib/moat/kv/client.py +1025 -0
  15. build/lib/moat/kv/code.py +236 -0
  16. build/lib/moat/kv/codec.py +11 -0
  17. build/lib/moat/kv/command/__init__.py +1 -0
  18. build/lib/moat/kv/command/acl.py +180 -0
  19. build/lib/moat/kv/command/auth.py +261 -0
  20. build/lib/moat/kv/command/code.py +293 -0
  21. build/lib/moat/kv/command/codec.py +186 -0
  22. build/lib/moat/kv/command/data.py +265 -0
  23. build/lib/moat/kv/command/dump/__init__.py +143 -0
  24. build/lib/moat/kv/command/error.py +149 -0
  25. build/lib/moat/kv/command/internal.py +248 -0
  26. build/lib/moat/kv/command/job.py +433 -0
  27. build/lib/moat/kv/command/log.py +53 -0
  28. build/lib/moat/kv/command/server.py +114 -0
  29. build/lib/moat/kv/command/type.py +201 -0
  30. build/lib/moat/kv/config.py +46 -0
  31. build/lib/moat/kv/data.py +216 -0
  32. build/lib/moat/kv/errors.py +561 -0
  33. build/lib/moat/kv/exceptions.py +126 -0
  34. build/lib/moat/kv/mock/__init__.py +101 -0
  35. build/lib/moat/kv/mock/mqtt.py +159 -0
  36. build/lib/moat/kv/mock/tracer.py +63 -0
  37. build/lib/moat/kv/model.py +1069 -0
  38. build/lib/moat/kv/obj/__init__.py +646 -0
  39. build/lib/moat/kv/obj/command.py +241 -0
  40. build/lib/moat/kv/runner.py +1347 -0
  41. build/lib/moat/kv/server.py +2809 -0
  42. build/lib/moat/kv/types.py +513 -0
  43. ci/rtd-requirements.txt +4 -0
  44. ci/test-requirements.txt +7 -0
  45. ci/travis.sh +96 -0
  46. debian/.gitignore +7 -0
  47. debian/changelog +1435 -0
  48. debian/control +43 -0
  49. debian/moat-kv/usr/lib/python3/dist-packages/docs/source/conf.py +201 -0
  50. debian/moat-kv/usr/lib/python3/dist-packages/examples/pathify.py +45 -0
  51. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/__init__.py +19 -0
  52. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/_cfg.yaml +93 -0
  53. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/_main.py +91 -0
  54. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/actor/__init__.py +98 -0
  55. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/actor/deletor.py +139 -0
  56. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/auth/__init__.py +444 -0
  57. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/auth/_test.py +166 -0
  58. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/auth/password.py +234 -0
  59. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/auth/root.py +58 -0
  60. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/backend/__init__.py +67 -0
  61. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/backend/mqtt.py +71 -0
  62. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/client.py +1025 -0
  63. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/code.py +236 -0
  64. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/codec.py +11 -0
  65. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/__init__.py +1 -0
  66. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/acl.py +180 -0
  67. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/auth.py +261 -0
  68. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/code.py +293 -0
  69. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/codec.py +186 -0
  70. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/data.py +265 -0
  71. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/dump/__init__.py +143 -0
  72. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/error.py +149 -0
  73. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/internal.py +248 -0
  74. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/job.py +433 -0
  75. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/log.py +53 -0
  76. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/server.py +114 -0
  77. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/type.py +201 -0
  78. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/config.py +46 -0
  79. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/data.py +216 -0
  80. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/errors.py +561 -0
  81. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/exceptions.py +126 -0
  82. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/mock/__init__.py +101 -0
  83. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/mock/mqtt.py +159 -0
  84. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/mock/tracer.py +63 -0
  85. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/model.py +1069 -0
  86. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/obj/__init__.py +646 -0
  87. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/obj/command.py +241 -0
  88. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/runner.py +1347 -0
  89. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/server.py +2809 -0
  90. debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/types.py +513 -0
  91. debian/moat-kv.postinst +3 -0
  92. debian/rules +20 -0
  93. debian/source/format +1 -0
  94. debian/watch +4 -0
  95. docs/Makefile +20 -0
  96. docs/make.bat +36 -0
  97. docs/source/TODO.rst +61 -0
  98. docs/source/_static/.gitkeep +0 -0
  99. docs/source/acls.rst +80 -0
  100. docs/source/auth.rst +84 -0
  101. docs/source/client_protocol.rst +456 -0
  102. docs/source/code.rst +341 -0
  103. docs/source/command_line.rst +1187 -0
  104. docs/source/common_protocol.rst +47 -0
  105. docs/source/conf.py +201 -0
  106. docs/source/debugging.rst +70 -0
  107. docs/source/extend.rst +37 -0
  108. docs/source/history.rst +36 -0
  109. docs/source/index.rst +75 -0
  110. docs/source/model.rst +54 -0
  111. docs/source/overview.rst +83 -0
  112. docs/source/related.rst +89 -0
  113. docs/source/server_protocol.rst +450 -0
  114. docs/source/startup.rst +31 -0
  115. docs/source/translator.rst +244 -0
  116. docs/source/tutorial.rst +711 -0
  117. docs/source/v3.rst +168 -0
  118. examples/code/transform.scale.yml +21 -0
  119. examples/code/transform.switch.yml +82 -0
  120. examples/code/transform.timeslot.yml +63 -0
  121. examples/pathify.py +45 -0
  122. moat/kv/_cfg.yaml +2 -6
  123. moat/kv/actor/__init__.py +98 -0
  124. moat/kv/actor/deletor.py +139 -0
  125. moat/kv/auth/__init__.py +444 -0
  126. moat/kv/auth/_test.py +166 -0
  127. moat/kv/auth/password.py +234 -0
  128. moat/kv/auth/root.py +58 -0
  129. moat/kv/backend/__init__.py +67 -0
  130. moat/kv/backend/mqtt.py +71 -0
  131. moat/kv/command/__init__.py +1 -0
  132. moat/kv/command/acl.py +180 -0
  133. moat/kv/command/auth.py +261 -0
  134. moat/kv/command/code.py +293 -0
  135. moat/kv/command/codec.py +186 -0
  136. moat/kv/command/data.py +265 -0
  137. moat/kv/command/dump/__init__.py +143 -0
  138. moat/kv/command/error.py +149 -0
  139. moat/kv/command/internal.py +248 -0
  140. moat/kv/command/job.py +433 -0
  141. moat/kv/command/log.py +53 -0
  142. moat/kv/command/server.py +114 -0
  143. moat/kv/command/type.py +201 -0
  144. moat/kv/mock/__init__.py +101 -0
  145. moat/kv/mock/mqtt.py +159 -0
  146. moat/kv/mock/tracer.py +63 -0
  147. moat/kv/obj/__init__.py +646 -0
  148. moat/kv/obj/command.py +241 -0
  149. {moat_kv-0.70.23.dist-info → moat_kv-0.71.0.dist-info}/METADATA +2 -5
  150. moat_kv-0.71.0.dist-info/RECORD +188 -0
  151. moat_kv-0.71.0.dist-info/top_level.txt +9 -0
  152. scripts/current +15 -0
  153. scripts/env +8 -0
  154. scripts/init +39 -0
  155. scripts/recover +17 -0
  156. scripts/rotate +33 -0
  157. scripts/run +29 -0
  158. scripts/run-all +10 -0
  159. scripts/run-any +10 -0
  160. scripts/run-single +15 -0
  161. scripts/success +4 -0
  162. systemd/moat-kv-recover.service +21 -0
  163. systemd/moat-kv-rotate.service +20 -0
  164. systemd/moat-kv-rotate.timer +10 -0
  165. systemd/moat-kv-run-all.service +26 -0
  166. systemd/moat-kv-run-all@.service +25 -0
  167. systemd/moat-kv-run-any.service +26 -0
  168. systemd/moat-kv-run-any@.service +25 -0
  169. systemd/moat-kv-run-single.service +26 -0
  170. systemd/moat-kv-run-single@.service +25 -0
  171. systemd/moat-kv.service +27 -0
  172. systemd/postinst +7 -0
  173. systemd/sysusers +3 -0
  174. moat_kv-0.70.23.dist-info/RECORD +0 -19
  175. moat_kv-0.70.23.dist-info/top_level.txt +0 -1
  176. {moat_kv-0.70.23.dist-info → moat_kv-0.71.0.dist-info}/WHEEL +0 -0
  177. {moat_kv-0.70.23.dist-info → moat_kv-0.71.0.dist-info}/licenses/LICENSE.txt +0 -0
moat/kv/obj/command.py ADDED
@@ -0,0 +1,241 @@
1
+ # command line interface helpers for objects
2
+ from __future__ import annotations
3
+
4
+ import logging
5
+ import sys
6
+
7
+ import asyncclick as click
8
+ from moat.util import NotGiven
9
+
10
+ logger = logging.getLogger(__name__)
11
+
12
+ __all__ = ["std_command"]
13
+
14
+
15
+ class _InvSub:
16
+ """
17
+ This class is a helper for "std_command".
18
+ """
19
+
20
+ def __init__(
21
+ self,
22
+ name,
23
+ id_name="name",
24
+ id_typ=str,
25
+ aux=(),
26
+ name_cb=None,
27
+ id_cb=None,
28
+ postproc=None,
29
+ apply=None,
30
+ short_help=None,
31
+ sub_base=None,
32
+ sub_name=None,
33
+ long_name=None,
34
+ prepare=None,
35
+ list_recursive=False,
36
+ ):
37
+ self.name = name
38
+ self.id_name = id_name
39
+ self.id_typ = id_typ
40
+ self.id_cb = id_cb or (lambda _c, _k, x: x)
41
+ self.apply = apply or (lambda _c, _t, _x: None)
42
+ self.name_cb = name_cb or (lambda _c, _k, x: x)
43
+ self.aux = aux
44
+ self.short_help = short_help
45
+ self.postproc = postproc or (lambda _c, _t, x: None)
46
+ self.long_name = long_name or name
47
+ self.sub_base = sub_base
48
+ self.prepare = prepare
49
+ self.list_recursive = list_recursive
50
+ if sub_name is NotGiven:
51
+ self.sub_name = None
52
+ else:
53
+ self.sub_name = sub_name or name
54
+
55
+ def id_arg(self, proc):
56
+ if self.id_name is None:
57
+ return proc
58
+ return click.argument(self.id_name, type=self.id_typ, callback=self.id_cb, nargs=1)(proc)
59
+
60
+ def apply_aux(self, proc):
61
+ for t in self.aux:
62
+ proc = t(proc)
63
+ return proc
64
+
65
+
66
+ def std_command(cli, *a, **kw):
67
+ """
68
+ This procedure builds the interface for an inventory-ish thing.
69
+
70
+ Usage::
71
+
72
+ @click.group(short_help="Manage computer inventory.")
73
+ @click.pass_obj
74
+ async def cli(obj):
75
+ "Inventorize your computers, networks, and their connections."
76
+ obj.inv = await InventoryRoot.as_handler(obj.client)
77
+
78
+ std_command(
79
+ cli, # from above
80
+ "vlan", # subcommand name
81
+ "id", # item identifier
82
+ int, # item identifier type
83
+ aux=( # additional attributes
84
+ click.option("-d", "--desc", type=str, default=None, help="Description"),
85
+ click.option("-w", "--wlan", type=str, default=None, help="WLAN SSID"),
86
+ ),
87
+ short_help="Manage VLANs",
88
+ )
89
+ """
90
+ tinv = _InvSub(*a, **kw)
91
+ tname = tinv.name
92
+ tnname = "n_" + tname
93
+
94
+ def this(obj):
95
+ # Delayed resolving of the actual thing subhierarchy
96
+ if tinv.sub_base:
97
+ data = getattr(obj, tinv.sub_base)
98
+ else:
99
+ data = obj.data
100
+ if tinv.sub_name:
101
+ return getattr(data, tinv.sub_name)
102
+ return data
103
+
104
+ @cli.group(
105
+ name=tname,
106
+ invoke_without_command=True,
107
+ short_help=tinv.short_help,
108
+ help=f"""\
109
+ Manager for {tinv.long_name}s.
110
+
111
+ \b
112
+ Use '… {tname} -' to list all entries.
113
+ Use '… {tname} NAME' to show details of a single entry.
114
+ """,
115
+ )
116
+ @click.argument("name", type=str, nargs=1)
117
+ @click.pass_context
118
+ async def typ(ctx, name):
119
+ obj = ctx.obj
120
+ if tinv.prepare is not None:
121
+ await tinv.prepare(obj)
122
+
123
+ if name == "-":
124
+ if ctx.invoked_subcommand is not None:
125
+ raise click.BadParameter("The name '-' triggers a list and precludes subcommands.")
126
+ cnt = 0
127
+ for n in this(obj).all_children if tinv.list_recursive else this(obj):
128
+ cnt += 1
129
+ print(n, file=obj.stdout)
130
+ if not cnt and ctx.obj.debug:
131
+ print("no entries", file=sys.stderr)
132
+ elif ctx.invoked_subcommand is None:
133
+ # Show data from a single entry
134
+ n = this(obj).by_name(name)
135
+ if n is None:
136
+ raise KeyError(name)
137
+ cnt = 0
138
+ for k in n.ATTRS + getattr(n, "AUX_ATTRS", ()):
139
+ v = getattr(n, k, None)
140
+ if v is not None:
141
+ cnt += 1
142
+ if isinstance(v, dict):
143
+ v = v.items()
144
+ if isinstance(v, type({}.items())): # pylint: disable=W1116
145
+ for kk, vv in sorted(v):
146
+ if isinstance(vv, (tuple, list)):
147
+ if vv:
148
+ vv = " ".join(str(x) for x in vv)
149
+ else:
150
+ vv = "-"
151
+ elif isinstance(vv, dict):
152
+ vv = " ".join("%s=%s" % (x, y) for x, y in sorted(vv.items()))
153
+ print("%s %s %s" % (k, kk, vv), file=obj.stdout)
154
+ else:
155
+ print("%s %s" % (k, v), file=obj.stdout)
156
+ if not cnt and ctx.obj.debug:
157
+ print("exists, no data", file=sys.stderr)
158
+ else:
159
+ obj[tnname] = name
160
+ try:
161
+ obj[tname] = this(obj).by_name(name)
162
+ except KeyError:
163
+ obj[tname] = None
164
+
165
+ def alloc(obj, name):
166
+ # Allocate a new thing
167
+ if isinstance(name, (tuple, list)):
168
+ n = this(obj).follow(name, create=True)
169
+ else:
170
+ n = this(obj).allocate(name)
171
+ return n
172
+
173
+ # This is a hack for groups that take arguments. Doesn't work for
174
+ # multiple arguments, but you shouldn't do that anyway.
175
+ @typ.command("--help", hidden=True)
176
+ @click.pass_context
177
+ def help_(ctx): # pylint:disable=unused-variable # oh boy
178
+ print(typ.get_help(ctx))
179
+
180
+ @typ.command(short_help="Add a " + tinv.long_name)
181
+ @tinv.id_arg
182
+ @tinv.apply_aux
183
+ @click.pass_obj
184
+ async def add(obj, **kw):
185
+ name = obj[tnname]
186
+ if obj[tname] is not None:
187
+ raise RuntimeError(f"{name} already exists")
188
+ if tinv.id_name:
189
+ kw["name"] = name
190
+ n = alloc(obj, kw.pop(tinv.id_name))
191
+ else:
192
+ n = alloc(obj, name)
193
+
194
+ await _v_mod(obj, n, **kw)
195
+
196
+ add.__doc__ = f"""
197
+ Add a {tinv.long_name}
198
+ """
199
+
200
+ @typ.command("set", short_help="Modify a " + tinv.long_name)
201
+ @tinv.apply_aux
202
+ @click.pass_obj
203
+ async def set_(obj, **kw):
204
+ n = obj[tname]
205
+ if n is None:
206
+ raise KeyError(tname)
207
+
208
+ await _v_mod(obj, n, **kw)
209
+
210
+ set_.__doc__ = f"""
211
+ Modify a {tinv.long_name}
212
+ """
213
+
214
+ @typ.command(short_help="Delete a " + tinv.long_name)
215
+ @click.pass_obj
216
+ async def delete(obj, **kw): # pylint: disable=unused-argument,unused-variable
217
+ name = obj[tnname]
218
+ n = this(obj).by_name(name)
219
+ if n is not None:
220
+ await n.delete()
221
+
222
+ delete.__doc__ = """
223
+ Delete a {tinv.long_name}
224
+ """
225
+
226
+ async def _v_mod(obj, thing, **kw):
227
+ tinv.apply(obj, thing, kw)
228
+ for k, v in kw.items():
229
+ if v:
230
+ if v == "-":
231
+ v = None
232
+ try:
233
+ setattr(thing, k, v)
234
+ except AttributeError:
235
+ if k != "name":
236
+ raise AttributeError(k, v) from None
237
+ tinv.postproc(obj, thing, kw)
238
+ await thing.save()
239
+
240
+ # Finally, return the CLI so the user can attach more stuff
241
+ return typ
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: moat-kv
3
- Version: 0.70.23
3
+ Version: 0.71.0
4
4
  Summary: A distributed no-master key-value store
5
5
  Author-email: Matthias Urlichs <matthias@urlichs.de>
6
6
  Project-URL: homepage, https://m-o-a-t.org
@@ -25,7 +25,6 @@ Requires-Dist: trio>=0.22
25
25
  Requires-Dist: anyio>=4
26
26
  Requires-Dist: range_set>=0.2
27
27
  Requires-Dist: attrs>=22
28
- Requires-Dist: asyncserf>=0.16
29
28
  Requires-Dist: asyncactor>=0.24
30
29
  Requires-Dist: asyncscope>=0.10.4
31
30
  Requires-Dist: jsonschema>=2.5
@@ -34,11 +33,9 @@ Requires-Dist: PyNaCl>=1.3
34
33
  Requires-Dist: moat-lib-diffiehellman~=0.13.4
35
34
  Requires-Dist: psutil
36
35
  Requires-Dist: simpleeval>=0.9.10
37
- Requires-Dist: moat-mqtt~=0.42.2
36
+ Requires-Dist: moat-mqtt~=0.42.4
38
37
  Requires-Dist: moat-util~=0.56.4
39
38
  Requires-Dist: exceptiongroup; python_version < "3.11"
40
- Provides-Extra: dev
41
- Requires-Dist: moat-src>=0.5.0; extra == "dev"
42
39
  Dynamic: license-file
43
40
 
44
41
  =======
@@ -0,0 +1,188 @@
1
+ build/lib/docs/source/conf.py,sha256=v4cO_xK-WpfHeOCQ4RaeHFk8vwBM7Gg3sw6DgGLmpCc,6072
2
+ build/lib/examples/pathify.py,sha256=cq2j7Nqhl3jmoNZ6l8wMj4j7DkHMxyB7-oTOrCZA0xQ,1128
3
+ build/lib/moat/kv/__init__.py,sha256=TO2TyH5Focv78vDDqtiN1vZVLsVihrOqvHBAlLIgVRA,508
4
+ build/lib/moat/kv/_cfg.yaml,sha256=HMyyiInthAOme_j9ydpfMzSvWVn_wgpNFAFyhpOCsuo,2153
5
+ build/lib/moat/kv/_main.py,sha256=SgI4ef8AQDOC4N4pLRiyaiSiFIzN-J337WIcuC7DPOY,2234
6
+ build/lib/moat/kv/client.py,sha256=c8YV0sjpO2XYpNE-fep7fDO2kgsNdShZxgCjohy23CY,34549
7
+ build/lib/moat/kv/code.py,sha256=gM7WNsjCfukr7h2fKm1U3zMHN5Wj-_hgy5U817LP9qE,6427
8
+ build/lib/moat/kv/codec.py,sha256=1AUNYxCOUJSZfZlny-asNZ0gmz0eaPmQKjr3biNDhWM,284
9
+ build/lib/moat/kv/config.py,sha256=cWJ1m8PRwzzapsin1XSDjRtYJCgNN6g7gA9q48luDV8,1093
10
+ build/lib/moat/kv/data.py,sha256=oiSGHnrrmJOkxC71bQj1ZsmBsVpE_vPT83IqRuHaNls,5992
11
+ build/lib/moat/kv/errors.py,sha256=wmi2OVsO4IeedScGTTFWvECkHLHMRiukoWXLpjI4-Us,16742
12
+ build/lib/moat/kv/exceptions.py,sha256=4gRsYa6kuBy1qFYiBUYElup_cvOe7QgPQtryHAYphzo,1849
13
+ build/lib/moat/kv/model.py,sha256=il8TjxrvL3EJKTZ88IDx2pJXcaKbXUSwsOIV4lXsW9Q,33390
14
+ build/lib/moat/kv/runner.py,sha256=eDXsNFWKidx5HLmP2MGpgRdeTeoL7dCSXLA_BKy55uE,41889
15
+ build/lib/moat/kv/server.py,sha256=O-yJiJYT5sQPeku9iTRo-SXqkHBq7OhKpHSA5IbKtvM,94918
16
+ build/lib/moat/kv/types.py,sha256=6klFuDHtbhRxrpLOYn1tnDndoRwE0nrolz3tFKOWtd8,14056
17
+ build/lib/moat/kv/actor/__init__.py,sha256=EdDaj0xXvL9QIecooWg3AfPyCHjdCCtKzXmtPRA7pkE,2134
18
+ build/lib/moat/kv/actor/deletor.py,sha256=v33XsCaemmaxZHRZP6JWap1yV9k7WkK6smPB-mwHyZA,4481
19
+ build/lib/moat/kv/auth/__init__.py,sha256=xd-nO76LTGeo7ppCqqv2aOc6nhzzyyRXmYKT4x3_I88,12490
20
+ build/lib/moat/kv/auth/_test.py,sha256=ZaMpMf2CTJ6sdGyENUhdWAY5TLC-kBtszM3dFQbyuWA,4342
21
+ build/lib/moat/kv/auth/password.py,sha256=DQG2BnNEoQ0H-znkHJx0G9-bcdWwg3IgqojcAHhKIsQ,6307
22
+ build/lib/moat/kv/auth/root.py,sha256=lW-_hgQp3ZIzAAe4iBl0rdMU-pFuHIC6ObA3rdFXxkk,1303
23
+ build/lib/moat/kv/backend/__init__.py,sha256=f5nIOWD2zml2YiaBNXtEOzC7SEGgwDFJMB8YzRISJ0A,1689
24
+ build/lib/moat/kv/backend/mqtt.py,sha256=XUwMR8RPzq6EPLub0cy7YzXTS1CkfBZFtZ4W9GTcQBo,2007
25
+ build/lib/moat/kv/command/__init__.py,sha256=9_8wL9Scv8_Cs8HJyJHGvx1vwXErsuvlsAqNZLcJQR0,8
26
+ build/lib/moat/kv/command/acl.py,sha256=wSdlzKBjWIFX3IxCdLcG3ZqjvtX8KPtqe38ibyU2VDo,4665
27
+ build/lib/moat/kv/command/auth.py,sha256=vP22ZIBMjRdUxN4_ELKiDgIE5ZqdMxs1ky1WDVUx50M,7149
28
+ build/lib/moat/kv/command/code.py,sha256=ycGBoKBB0Gse3Tt9h9WvgiIZVe3Yg-x92RRjfCCCXVQ,8066
29
+ build/lib/moat/kv/command/codec.py,sha256=8GqOl-oxWFM2D1Fm9Iheot2AmS_SsOYfqfbbde3qvQY,6028
30
+ build/lib/moat/kv/command/data.py,sha256=ntT6CQkmXtyFMgJNm9WMn23kVP5MR73q53w2WASsoOg,8396
31
+ build/lib/moat/kv/command/error.py,sha256=XqHmVJgBGjr6XOozi23wEjiTqPopD1CzkIeR1a3Z_vY,4350
32
+ build/lib/moat/kv/command/internal.py,sha256=wjEHTltUXIMEiXriyd5DuTDlaI_2W2uaJIi-dNLT_OA,7397
33
+ build/lib/moat/kv/command/job.py,sha256=C2qH7ghQcPL5vj-Pg0YZ2i2Rvg5kpzH58EqBTCaK1Tw,13614
34
+ build/lib/moat/kv/command/log.py,sha256=ycdtMgiBw2DaCu0yu6tpWKPLlQ33ZZemXsfwZrCzRGg,1350
35
+ build/lib/moat/kv/command/server.py,sha256=Hl_6FFq322c5KjJCKxH1nCrxo-h0VEwH4IOMbVeUBN4,3392
36
+ build/lib/moat/kv/command/type.py,sha256=JN0_Abb5wR4UJH5zHnVZgT93NJRYY6qpRD_ZQT13u4k,6226
37
+ build/lib/moat/kv/command/dump/__init__.py,sha256=L05R6W9eDzUDAr7UhfEo1lZR-UB0qYUUf-5dRHC-p-0,4000
38
+ build/lib/moat/kv/mock/__init__.py,sha256=HW6YAwo_OBVRmTeRCc-ZoUHB7-D78cEONlcb5vACdIE,2760
39
+ build/lib/moat/kv/mock/mqtt.py,sha256=b9pzbwQBmTX2eSiSgNO7nh2-7l8-0TT8n2GxinQ-1l0,5213
40
+ build/lib/moat/kv/mock/tracer.py,sha256=qLEIn9gdlYUypyRYD8O8SbM8ye8XR4xtBl3otP6uNLs,2058
41
+ build/lib/moat/kv/obj/__init__.py,sha256=yeiZ6bWM8XhK28ruqX7RmpPhytYXlOJPRw_hsWbvExk,19800
42
+ build/lib/moat/kv/obj/command.py,sha256=QQiOhPtlGV07kuutV0KowmC2HiXhmIFUktofqlRg1GA,7446
43
+ ci/rtd-requirements.txt,sha256=q_4dVDUIuXYxY3nN9_NCKYUiBpktQFouyqfmCANc1W4,123
44
+ ci/test-requirements.txt,sha256=ABIHUDbtJ3hpVgItYyHuFbh9UKuRMYmkILROxc1ygmk,74
45
+ ci/travis.sh,sha256=CZiQZUebAmYYH3DUOArik0ktJCG8Q0DE7lb0D-porDo,3335
46
+ debian/.gitignore,sha256=hecgAHAGCwd3DkI44GQT08cmd8DaCcz-zOQuINQ7ZKs,97
47
+ debian/changelog,sha256=lcGqGWXCsqfuc6LC02cFdiK7c9RD4p9tNMSqOttB81s,32353
48
+ debian/control,sha256=a5aeNf2U0O9kAZjh28-g0-HuJsYksxPWTgVNZ5kW2VY,1441
49
+ debian/moat-kv.postinst,sha256=2z322zcHXXTX0lXcOUn9DBnVPNO4f_d8nsfxuhNpfHY,33
50
+ debian/rules,sha256=bOC4tJvuLUgFaQmBu_zxcjtJGn01HkZKhctnDoqT6WY,461
51
+ debian/watch,sha256=O8zhQHur_qoHyzVIewbea-dfUSkJmCmV7P6PzZFPkR4,191
52
+ debian/moat-kv/usr/lib/python3/dist-packages/docs/source/conf.py,sha256=v4cO_xK-WpfHeOCQ4RaeHFk8vwBM7Gg3sw6DgGLmpCc,6072
53
+ debian/moat-kv/usr/lib/python3/dist-packages/examples/pathify.py,sha256=cq2j7Nqhl3jmoNZ6l8wMj4j7DkHMxyB7-oTOrCZA0xQ,1128
54
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/__init__.py,sha256=TO2TyH5Focv78vDDqtiN1vZVLsVihrOqvHBAlLIgVRA,508
55
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/_cfg.yaml,sha256=HMyyiInthAOme_j9ydpfMzSvWVn_wgpNFAFyhpOCsuo,2153
56
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/_main.py,sha256=SgI4ef8AQDOC4N4pLRiyaiSiFIzN-J337WIcuC7DPOY,2234
57
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/client.py,sha256=c8YV0sjpO2XYpNE-fep7fDO2kgsNdShZxgCjohy23CY,34549
58
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/code.py,sha256=gM7WNsjCfukr7h2fKm1U3zMHN5Wj-_hgy5U817LP9qE,6427
59
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/codec.py,sha256=1AUNYxCOUJSZfZlny-asNZ0gmz0eaPmQKjr3biNDhWM,284
60
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/config.py,sha256=cWJ1m8PRwzzapsin1XSDjRtYJCgNN6g7gA9q48luDV8,1093
61
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/data.py,sha256=oiSGHnrrmJOkxC71bQj1ZsmBsVpE_vPT83IqRuHaNls,5992
62
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/errors.py,sha256=wmi2OVsO4IeedScGTTFWvECkHLHMRiukoWXLpjI4-Us,16742
63
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/exceptions.py,sha256=4gRsYa6kuBy1qFYiBUYElup_cvOe7QgPQtryHAYphzo,1849
64
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/model.py,sha256=il8TjxrvL3EJKTZ88IDx2pJXcaKbXUSwsOIV4lXsW9Q,33390
65
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/runner.py,sha256=eDXsNFWKidx5HLmP2MGpgRdeTeoL7dCSXLA_BKy55uE,41889
66
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/server.py,sha256=O-yJiJYT5sQPeku9iTRo-SXqkHBq7OhKpHSA5IbKtvM,94918
67
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/types.py,sha256=6klFuDHtbhRxrpLOYn1tnDndoRwE0nrolz3tFKOWtd8,14056
68
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/actor/__init__.py,sha256=EdDaj0xXvL9QIecooWg3AfPyCHjdCCtKzXmtPRA7pkE,2134
69
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/actor/deletor.py,sha256=v33XsCaemmaxZHRZP6JWap1yV9k7WkK6smPB-mwHyZA,4481
70
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/auth/__init__.py,sha256=xd-nO76LTGeo7ppCqqv2aOc6nhzzyyRXmYKT4x3_I88,12490
71
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/auth/_test.py,sha256=ZaMpMf2CTJ6sdGyENUhdWAY5TLC-kBtszM3dFQbyuWA,4342
72
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/auth/password.py,sha256=DQG2BnNEoQ0H-znkHJx0G9-bcdWwg3IgqojcAHhKIsQ,6307
73
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/auth/root.py,sha256=lW-_hgQp3ZIzAAe4iBl0rdMU-pFuHIC6ObA3rdFXxkk,1303
74
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/backend/__init__.py,sha256=f5nIOWD2zml2YiaBNXtEOzC7SEGgwDFJMB8YzRISJ0A,1689
75
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/backend/mqtt.py,sha256=XUwMR8RPzq6EPLub0cy7YzXTS1CkfBZFtZ4W9GTcQBo,2007
76
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/__init__.py,sha256=9_8wL9Scv8_Cs8HJyJHGvx1vwXErsuvlsAqNZLcJQR0,8
77
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/acl.py,sha256=wSdlzKBjWIFX3IxCdLcG3ZqjvtX8KPtqe38ibyU2VDo,4665
78
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/auth.py,sha256=vP22ZIBMjRdUxN4_ELKiDgIE5ZqdMxs1ky1WDVUx50M,7149
79
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/code.py,sha256=ycGBoKBB0Gse3Tt9h9WvgiIZVe3Yg-x92RRjfCCCXVQ,8066
80
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/codec.py,sha256=8GqOl-oxWFM2D1Fm9Iheot2AmS_SsOYfqfbbde3qvQY,6028
81
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/data.py,sha256=ntT6CQkmXtyFMgJNm9WMn23kVP5MR73q53w2WASsoOg,8396
82
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/error.py,sha256=XqHmVJgBGjr6XOozi23wEjiTqPopD1CzkIeR1a3Z_vY,4350
83
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/internal.py,sha256=wjEHTltUXIMEiXriyd5DuTDlaI_2W2uaJIi-dNLT_OA,7397
84
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/job.py,sha256=C2qH7ghQcPL5vj-Pg0YZ2i2Rvg5kpzH58EqBTCaK1Tw,13614
85
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/log.py,sha256=ycdtMgiBw2DaCu0yu6tpWKPLlQ33ZZemXsfwZrCzRGg,1350
86
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/server.py,sha256=Hl_6FFq322c5KjJCKxH1nCrxo-h0VEwH4IOMbVeUBN4,3392
87
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/type.py,sha256=JN0_Abb5wR4UJH5zHnVZgT93NJRYY6qpRD_ZQT13u4k,6226
88
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/command/dump/__init__.py,sha256=L05R6W9eDzUDAr7UhfEo1lZR-UB0qYUUf-5dRHC-p-0,4000
89
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/mock/__init__.py,sha256=HW6YAwo_OBVRmTeRCc-ZoUHB7-D78cEONlcb5vACdIE,2760
90
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/mock/mqtt.py,sha256=b9pzbwQBmTX2eSiSgNO7nh2-7l8-0TT8n2GxinQ-1l0,5213
91
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/mock/tracer.py,sha256=qLEIn9gdlYUypyRYD8O8SbM8ye8XR4xtBl3otP6uNLs,2058
92
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/obj/__init__.py,sha256=yeiZ6bWM8XhK28ruqX7RmpPhytYXlOJPRw_hsWbvExk,19800
93
+ debian/moat-kv/usr/lib/python3/dist-packages/moat/kv/obj/command.py,sha256=QQiOhPtlGV07kuutV0KowmC2HiXhmIFUktofqlRg1GA,7446
94
+ debian/source/format,sha256=G-cIDXLmtWbfPiNs4sVe_fu7j6HJctgl5bZy_4dzvho,12
95
+ docs/Makefile,sha256=g6jq_WYItszUyPzdvzs04ZgPOGXE_THsm2zAbvVUMnU,609
96
+ docs/make.bat,sha256=tZwnc3a-ozijIP3JTHDoSdNFMwXwrELNhOCFMBxB7K0,779
97
+ docs/source/TODO.rst,sha256=87ZE4VAEzSgYXr2BvUCnMFYa1TSNAr3nPiZNt0b6B5Y,1921
98
+ docs/source/acls.rst,sha256=qAG7SrTnBJv2IIS36FC74ubt0FJQ5rZBwd8yXuYQZd0,2018
99
+ docs/source/auth.rst,sha256=9-4se2vH-kbB86BiUMfafTXNtmHrPHH9nZDujRxw0ww,2603
100
+ docs/source/client_protocol.rst,sha256=X_EMTbWRXBotwAPDRCDeZUEBaK2OXul8t_PV0BiC1Gs,14094
101
+ docs/source/code.rst,sha256=ihHRtzpeEWGhioCUssakSrbkB7V2heA0Qca4RKcAv00,10371
102
+ docs/source/command_line.rst,sha256=jBK1-5Kc_ySTiIhVNK7W2Ffdf21MszCLFo3Z_aC04Kw,29241
103
+ docs/source/common_protocol.rst,sha256=8TT3OMZc0nX8wRSMg6gQk88OwQ2TekWTjcJVK4ymdfc,1281
104
+ docs/source/conf.py,sha256=v4cO_xK-WpfHeOCQ4RaeHFk8vwBM7Gg3sw6DgGLmpCc,6072
105
+ docs/source/debugging.rst,sha256=1wZIQGsHjMoLCKAK0TPlvAtxqMU4UyvHa6tUhXN4_eE,2188
106
+ docs/source/extend.rst,sha256=UjLPvKaod14mEbi20r2Qtx2ROZmsu2cWRAENMfFhlD4,1402
107
+ docs/source/history.rst,sha256=ba0qchAJyGI0exigWDrhYT26KfxjIYEnf8hFcr_XKJ8,868
108
+ docs/source/index.rst,sha256=8-oMWmXV6aXzUT6JK-ghYZMphDu98srReAVkj4IV3jU,1866
109
+ docs/source/model.rst,sha256=8yZfsmoOikxDw-0d82ArPg3MP-XzLWou0lfw8Ry8C0Q,1622
110
+ docs/source/overview.rst,sha256=-PdRj09LBJP-in5zWMO66OXTCu04tZvuReyeOlHP64c,3409
111
+ docs/source/related.rst,sha256=CvlTLgsnnha3646NMhH7Kg9KW1WZr0xQistU903C9Gc,2749
112
+ docs/source/server_protocol.rst,sha256=l9uG0yKOSmr9X7JuokWYbOauGUyp-FZYnbP73UTHNgk,16180
113
+ docs/source/startup.rst,sha256=vx2_zvNrKHiRaYK5GIfzzJ1SmtMtVJ8yXJHfRhfxWuI,1085
114
+ docs/source/translator.rst,sha256=b1x0H_8E9abPEA-dBk656wWQpnioGpNmJKfbZz1XnnU,7513
115
+ docs/source/tutorial.rst,sha256=uoAZR44f6734Y7N9TYLai6-SEF0iPZRfJ8iXHn0yeKA,22429
116
+ docs/source/v3.rst,sha256=EQf1i4LJe7cSyWCgi_gLYAJjBmeF1KJ5yaKRzpB5psc,3960
117
+ docs/source/_static/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
+ examples/pathify.py,sha256=cq2j7Nqhl3jmoNZ6l8wMj4j7DkHMxyB7-oTOrCZA0xQ,1128
119
+ examples/code/transform.scale.yml,sha256=aim0aTXvbrGfkNsZ6WM5JUHTXfZdGCvKPGhq-8O9IQo,550
120
+ examples/code/transform.switch.yml,sha256=NUoO3241TtL-L-orMR0a3i2I0ZJLpgbz_TVXT07NocE,3033
121
+ examples/code/transform.timeslot.yml,sha256=9SSOEE77rT2iveH0UZLrmv9VeUJkAgb5k5bGV5C8WAk,2142
122
+ moat/kv/__init__.py,sha256=TO2TyH5Focv78vDDqtiN1vZVLsVihrOqvHBAlLIgVRA,508
123
+ moat/kv/_cfg.yaml,sha256=HMyyiInthAOme_j9ydpfMzSvWVn_wgpNFAFyhpOCsuo,2153
124
+ moat/kv/_main.py,sha256=SgI4ef8AQDOC4N4pLRiyaiSiFIzN-J337WIcuC7DPOY,2234
125
+ moat/kv/client.py,sha256=c8YV0sjpO2XYpNE-fep7fDO2kgsNdShZxgCjohy23CY,34549
126
+ moat/kv/code.py,sha256=gM7WNsjCfukr7h2fKm1U3zMHN5Wj-_hgy5U817LP9qE,6427
127
+ moat/kv/codec.py,sha256=1AUNYxCOUJSZfZlny-asNZ0gmz0eaPmQKjr3biNDhWM,284
128
+ moat/kv/config.py,sha256=cWJ1m8PRwzzapsin1XSDjRtYJCgNN6g7gA9q48luDV8,1093
129
+ moat/kv/data.py,sha256=oiSGHnrrmJOkxC71bQj1ZsmBsVpE_vPT83IqRuHaNls,5992
130
+ moat/kv/errors.py,sha256=wmi2OVsO4IeedScGTTFWvECkHLHMRiukoWXLpjI4-Us,16742
131
+ moat/kv/exceptions.py,sha256=4gRsYa6kuBy1qFYiBUYElup_cvOe7QgPQtryHAYphzo,1849
132
+ moat/kv/model.py,sha256=il8TjxrvL3EJKTZ88IDx2pJXcaKbXUSwsOIV4lXsW9Q,33390
133
+ moat/kv/runner.py,sha256=eDXsNFWKidx5HLmP2MGpgRdeTeoL7dCSXLA_BKy55uE,41889
134
+ moat/kv/server.py,sha256=O-yJiJYT5sQPeku9iTRo-SXqkHBq7OhKpHSA5IbKtvM,94918
135
+ moat/kv/types.py,sha256=6klFuDHtbhRxrpLOYn1tnDndoRwE0nrolz3tFKOWtd8,14056
136
+ moat/kv/actor/__init__.py,sha256=EdDaj0xXvL9QIecooWg3AfPyCHjdCCtKzXmtPRA7pkE,2134
137
+ moat/kv/actor/deletor.py,sha256=v33XsCaemmaxZHRZP6JWap1yV9k7WkK6smPB-mwHyZA,4481
138
+ moat/kv/auth/__init__.py,sha256=xd-nO76LTGeo7ppCqqv2aOc6nhzzyyRXmYKT4x3_I88,12490
139
+ moat/kv/auth/_test.py,sha256=ZaMpMf2CTJ6sdGyENUhdWAY5TLC-kBtszM3dFQbyuWA,4342
140
+ moat/kv/auth/password.py,sha256=DQG2BnNEoQ0H-znkHJx0G9-bcdWwg3IgqojcAHhKIsQ,6307
141
+ moat/kv/auth/root.py,sha256=lW-_hgQp3ZIzAAe4iBl0rdMU-pFuHIC6ObA3rdFXxkk,1303
142
+ moat/kv/backend/__init__.py,sha256=f5nIOWD2zml2YiaBNXtEOzC7SEGgwDFJMB8YzRISJ0A,1689
143
+ moat/kv/backend/mqtt.py,sha256=XUwMR8RPzq6EPLub0cy7YzXTS1CkfBZFtZ4W9GTcQBo,2007
144
+ moat/kv/command/__init__.py,sha256=9_8wL9Scv8_Cs8HJyJHGvx1vwXErsuvlsAqNZLcJQR0,8
145
+ moat/kv/command/acl.py,sha256=wSdlzKBjWIFX3IxCdLcG3ZqjvtX8KPtqe38ibyU2VDo,4665
146
+ moat/kv/command/auth.py,sha256=vP22ZIBMjRdUxN4_ELKiDgIE5ZqdMxs1ky1WDVUx50M,7149
147
+ moat/kv/command/code.py,sha256=ycGBoKBB0Gse3Tt9h9WvgiIZVe3Yg-x92RRjfCCCXVQ,8066
148
+ moat/kv/command/codec.py,sha256=8GqOl-oxWFM2D1Fm9Iheot2AmS_SsOYfqfbbde3qvQY,6028
149
+ moat/kv/command/data.py,sha256=ntT6CQkmXtyFMgJNm9WMn23kVP5MR73q53w2WASsoOg,8396
150
+ moat/kv/command/error.py,sha256=XqHmVJgBGjr6XOozi23wEjiTqPopD1CzkIeR1a3Z_vY,4350
151
+ moat/kv/command/internal.py,sha256=wjEHTltUXIMEiXriyd5DuTDlaI_2W2uaJIi-dNLT_OA,7397
152
+ moat/kv/command/job.py,sha256=C2qH7ghQcPL5vj-Pg0YZ2i2Rvg5kpzH58EqBTCaK1Tw,13614
153
+ moat/kv/command/log.py,sha256=ycdtMgiBw2DaCu0yu6tpWKPLlQ33ZZemXsfwZrCzRGg,1350
154
+ moat/kv/command/server.py,sha256=Hl_6FFq322c5KjJCKxH1nCrxo-h0VEwH4IOMbVeUBN4,3392
155
+ moat/kv/command/type.py,sha256=JN0_Abb5wR4UJH5zHnVZgT93NJRYY6qpRD_ZQT13u4k,6226
156
+ moat/kv/command/dump/__init__.py,sha256=L05R6W9eDzUDAr7UhfEo1lZR-UB0qYUUf-5dRHC-p-0,4000
157
+ moat/kv/mock/__init__.py,sha256=HW6YAwo_OBVRmTeRCc-ZoUHB7-D78cEONlcb5vACdIE,2760
158
+ moat/kv/mock/mqtt.py,sha256=b9pzbwQBmTX2eSiSgNO7nh2-7l8-0TT8n2GxinQ-1l0,5213
159
+ moat/kv/mock/tracer.py,sha256=qLEIn9gdlYUypyRYD8O8SbM8ye8XR4xtBl3otP6uNLs,2058
160
+ moat/kv/obj/__init__.py,sha256=yeiZ6bWM8XhK28ruqX7RmpPhytYXlOJPRw_hsWbvExk,19800
161
+ moat/kv/obj/command.py,sha256=QQiOhPtlGV07kuutV0KowmC2HiXhmIFUktofqlRg1GA,7446
162
+ moat_kv-0.71.0.dist-info/licenses/LICENSE.txt,sha256=L5vKJLVOg5t0CEEPpW9-O_0vzbP0PEjEF06tLvnIDuk,541
163
+ scripts/current,sha256=91NXrtN9AWtOdwGZs-yTaAgU_EKF4xXPo9Dvr9E3BkA,374
164
+ scripts/env,sha256=Le76hZQSvDrNiFfhCzK0PDe4STLOdIpMcsQTYgk74Qs,113
165
+ scripts/init,sha256=gvezyZaPG-6RJ5nLC9Wc0kR_tZaiJAjLpJfRVnyfFik,1071
166
+ scripts/recover,sha256=dBuIN9v6yJ_dffVAsax8AfnD9oRfQHi0U8kk5w1ReH4,332
167
+ scripts/rotate,sha256=zoBI7A5hN54TNgC0FYIMGusHmqe1LcICNyhkukL7eYs,837
168
+ scripts/run,sha256=Zbh5Qa5oYmn-fMpg_qUaPVbJrpDx4ht0rjKSm0eQt7E,795
169
+ scripts/run-all,sha256=GlheLEcCxQejv0cPmPPHSpXvK0ZcGQ_XDbt7W-ouPTM,220
170
+ scripts/run-any,sha256=y0y1Lk7ppUnOtiYrcAWHBetsW77nZEmlx-S2A7mhxYg,210
171
+ scripts/run-single,sha256=GmGi5Nu0uUmcs5PJiEBaEbz3O7k1-669nUoAX-Bj2KQ,316
172
+ scripts/success,sha256=KCkdAPsgiEiUBcEgluKJFcB5fGk6VEv0Uo8FP9frKLA,33
173
+ systemd/moat-kv-recover.service,sha256=zqqDEBW21iQ8O2tBdiAMEUoGdgt1ZLLzmhToIAq76Ew,355
174
+ systemd/moat-kv-rotate.service,sha256=BFhLT6FIwk0w0q9AH_mfKS9S1T0wcjr-8oH01bn2LPI,355
175
+ systemd/moat-kv-rotate.timer,sha256=vQ6oVU4KhvD9q-90y8GUil1ewIv0ld4jULrLelHJ-2I,161
176
+ systemd/moat-kv-run-all.service,sha256=D34_d8o3qmNAGEtlqpdx4oaU2jUd7h3qypkjQMcGgHE,428
177
+ systemd/moat-kv-run-all@.service,sha256=-00TrYu3-3k01spmb0_FfbZFBkzguOMcp3LUyjiesfI,397
178
+ systemd/moat-kv-run-any.service,sha256=kINPhW7CIQCIuMsuKnXTkzOw9dTZ-ujxpJWWQPcC-Ic,428
179
+ systemd/moat-kv-run-any@.service,sha256=EQXBp1P-MgAzGD1wr2RXgBDkz_zx1MGcz6FMf09GCwU,397
180
+ systemd/moat-kv-run-single.service,sha256=ASLd9fH-tY8ZnAsuPmNxiuKaVfGzLC56EJU39UtlEgk,436
181
+ systemd/moat-kv-run-single@.service,sha256=uhy3Pl9ojm4vJhYVP1CxYdM_e-vtIq0q6b-oWjrdABQ,402
182
+ systemd/moat-kv.service,sha256=g9BtStXpKDQ0o3Ivgw5t9s5KintzXabJIR6FvL-nJnQ,502
183
+ systemd/postinst,sha256=INv8dSI8KT5VKX9Fr8uN0l6IbAO3Bi28aTQTgfQArL8,198
184
+ systemd/sysusers,sha256=swfLW1o9tZ8i1d8KL5JP75R1p7DVMekLX0r-YTNPZlY,78
185
+ moat_kv-0.71.0.dist-info/METADATA,sha256=sRDrUCQS6Kf6Z6xmDdcXPzbNFv3wougCrsWIRcrqu2c,3271
186
+ moat_kv-0.71.0.dist-info/WHEEL,sha256=xcaH6rP_nCxh1LBIPM7Q0uOnzSGjsIye-Q44j_zbzw8,104
187
+ moat_kv-0.71.0.dist-info/top_level.txt,sha256=LyFVSz3-SU-7B8r2qZ3ODVF_QvXqE08qepkD1rfQLk4,56
188
+ moat_kv-0.71.0.dist-info/RECORD,,
@@ -0,0 +1,9 @@
1
+ build
2
+ ci
3
+ debian
4
+ dist
5
+ docs
6
+ examples
7
+ moat
8
+ scripts
9
+ systemd
scripts/current ADDED
@@ -0,0 +1,15 @@
1
+ #!/bin/sh
2
+ set -ex
3
+
4
+ # This script takes the most-current state files and writes them to the
5
+ # named file.
6
+
7
+ test -n "$1"
8
+ F="$(python3 -c "import sys; from os.path import abspath; print(abspath(sys.argv[1]))" "$1")"
9
+
10
+ mkdir -p "$DEST"
11
+ cd "$DEST"
12
+ d=$(find . -name 0.dkv -size +1c -print | sort -r | head -1)
13
+ cd $(dirname "$d")
14
+
15
+ ls | grep '\.dkv$' | sort -n | xargs cat > "$TEMP"
scripts/env ADDED
@@ -0,0 +1,8 @@
1
+ # shell
2
+
3
+ PATH=/usr/bin:/bin
4
+ DEST=/var/lib/moat/kv/
5
+ DATE="%Y-%m-%d-%H"
6
+ MODE=hybrid
7
+ TEMP=/tmp/moat.kv.current.dkv
8
+
scripts/init ADDED
@@ -0,0 +1,39 @@
1
+ #!/bin/sh
2
+ set -ex
3
+
4
+ # This script sets up an initial MoaT-KV master.
5
+ systemd-sysusers --no-pager /usr/lib/sysusers.d/moat-kv.conf
6
+
7
+ . /usr/lib/moat/kv/env
8
+
9
+ mkdir -p /etc/moat
10
+ test -f /etc/moat/kv.env || touch /etc/moat/kv.env
11
+ grep -qs '^MODE=' /etc/moat/kv.env || echo MODE=hybrid >>/etc/moat/kv.env
12
+ grep -qs '^NAME=' /etc/moat/kv.env || echo NAME=$(hostname) >>/etc/moat/kv.env
13
+ grep -qs '^LOCAL=' /etc/moat/kv.env || echo LOCAL=no >>/etc/moat/kv.env
14
+
15
+ . /etc/moat/kv.env
16
+
17
+ if test "$MODE" != "slave" ; then
18
+ mkdir -p "$DEST"
19
+ cd "$DEST"
20
+ d="$(find . -name 0.dkv -size +1c | sort | head -1)"
21
+ if test -n "$d" ; then
22
+ d="$(dirname "$d")"
23
+ else
24
+ d="$(date -d 2019-01-01 +"$DATE")"
25
+ mkdir -p "$d"
26
+ fi
27
+ cd $d
28
+
29
+ if test ! -s "0.dkv" ; then
30
+ moat kv dump init $NAME 0.dkv
31
+ chown -R MoaT-KV:MoaT "$DEST"
32
+ fi
33
+ fi
34
+
35
+ if test "$(moat util cfg kv.conn.host)" = "127.0.0.1" ; then
36
+ systemctl enable moat-kv.service
37
+ systemctl enable moat-kv-rotate.timer || true # may be masked
38
+ systemctl restart moat-kv.service &
39
+ fi
scripts/recover ADDED
@@ -0,0 +1,17 @@
1
+ #!/bin/bash
2
+ set -ex
3
+
4
+ # This script tries to recover from hybrid mode start failure
5
+ # by re-starting in master mode.
6
+
7
+ if ! test "$MODE" = hybrid ; then
8
+ echo "Not hybrid mode. Not restarting." >&2
9
+ exit 1
10
+ fi
11
+
12
+ if test -f "$TEMP" ; then
13
+ echo "$TEMP exists, not restarting" >&2
14
+ exit 1
15
+ fi
16
+ /usr/lib/moat/kv/current "$TEMP"
17
+
scripts/rotate ADDED
@@ -0,0 +1,33 @@
1
+ #!/bin/sh
2
+ set -ex
3
+
4
+ # This script tells MoaT-KV to continue with the next log file.
5
+ # By default it writes a full dump daily.
6
+
7
+ cd "$DEST"
8
+ D=$(date +"$DATE")
9
+ test -d $D || mkdir -p $D
10
+ cd $D
11
+
12
+ x=$(ls|sort -rn|head -1)
13
+ if test -n "$x" ; then
14
+ x=$(expr $(basename $x .dkv) + 1)
15
+ I="-i"
16
+ else
17
+ x=0
18
+ I=""
19
+ fi
20
+
21
+ export PYTHONPATH
22
+ moat -c /etc/moat/moat.cfg kv client log dest $I "$DEST/$D/$x.dkv"
23
+ if test $x -eq 0 ; then
24
+ # Now, delete some old backups
25
+ cd "$DEST"
26
+
27
+ # delete hourly after ten days but keep the day's first backup
28
+ find . -maxdepth 1 ! -name \*-00 -mtime +10 -print0|xargs -0r rm -rf
29
+ # delete daily after 45 days but keep the month's first backup
30
+ find . -maxdepth 1 ! -name \*01-00 -mtime +45 -print0|xargs -0r rm -rf
31
+ # delete monthly (i.e. the rest) after a year or so
32
+ find . -maxdepth 1 -mtime +400 -print0|xargs -0r rm -rf
33
+ fi
scripts/run ADDED
@@ -0,0 +1,29 @@
1
+ #!/bin/bash
2
+ set -ex
3
+
4
+ # This script starts up MoaT-KV.
5
+
6
+ # Normally, starting MoaT-KV on a host where clients don't connect locally is
7
+ # a bad idea. However, on a system that has more than one network namespace
8
+ # you need to use a specific address. So set LOCAL=yes to force starting
9
+ # anyway.
10
+
11
+ if test "$LOCAL" != "yes" && test "$(moat util cfg kv.conn.host)" != "127.0.0.1"; then
12
+ echo "Server is not localhost: not starting."
13
+ exit 42 # mark as succeeded
14
+ fi
15
+
16
+ if test "$MODE" = "master" ; then
17
+ /usr/lib/moat/kv/current "$TEMP"
18
+ fi
19
+
20
+ if test ! -v NAME ; then
21
+ echo "NAME is not set. Exiting." >&2
22
+ exit 1
23
+ fi
24
+
25
+ if test -v TEMP && test -s "$TEMP" ; then
26
+ exec moat -c /etc/moat/moat.cfg kv server -a -l "$TEMP" "$NAME"
27
+ else
28
+ exec moat -c /etc/moat/moat.cfg kv server "$NAME"
29
+ fi
scripts/run-all ADDED
@@ -0,0 +1,10 @@
1
+ #!/bin/bash
2
+ set -ex
3
+
4
+ # This script file starts up a MoaT-KV any-node runner.
5
+
6
+ if test $# = 1 ; then
7
+ exec moat -c /etc/moat/moat.cfg kv job -n - -g "$1" run
8
+ else
9
+ exec moat -c /etc/moat/moat.cfg kv job -n - run
10
+ fi
scripts/run-any ADDED
@@ -0,0 +1,10 @@
1
+ #!/bin/bash
2
+ set -ex
3
+
4
+ # This script file starts up a MoaT-KV any-node runner.
5
+
6
+ if test $# = 1 ; then
7
+ exec moat -c /etc/moat/moat.cfg kv job -g "$1" run
8
+ else
9
+ exec moat -c /etc/moat/moat.cfg kv job run
10
+ fi
scripts/run-single ADDED
@@ -0,0 +1,15 @@
1
+ #!/bin/bash
2
+ set -ex
3
+
4
+ # This script file starts up a MoaT-KV single-node runner.
5
+
6
+ if test ! -v NAME ; then
7
+ echo "NAME is not set. Exiting." >&2
8
+ exit 1
9
+ fi
10
+
11
+ if test $# = 1 ; then
12
+ exec moat -c /etc/moat/moat.cfg kv job -n "$NAME" -g "$1" run
13
+ else
14
+ exec moat -c /etc/moat/moat.cfg kv job -n "$NAME" run
15
+ fi