QuLab 2.5.5__tar.gz → 2.6.0__tar.gz

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 (112) hide show
  1. {qulab-2.5.5 → qulab-2.6.0}/PKG-INFO +1 -1
  2. {qulab-2.5.5 → qulab-2.6.0}/QuLab.egg-info/PKG-INFO +1 -1
  3. {qulab-2.5.5 → qulab-2.6.0}/qulab/executor/cli.py +4 -4
  4. {qulab-2.5.5 → qulab-2.6.0}/qulab/executor/schedule.py +15 -11
  5. {qulab-2.5.5 → qulab-2.6.0}/qulab/executor/storage.py +10 -0
  6. qulab-2.6.0/qulab/executor/transform.py +122 -0
  7. {qulab-2.5.5 → qulab-2.6.0}/qulab/executor/utils.py +21 -0
  8. qulab-2.6.0/qulab/version.py +1 -0
  9. qulab-2.5.5/qulab/executor/transform.py +0 -55
  10. qulab-2.5.5/qulab/version.py +0 -1
  11. {qulab-2.5.5 → qulab-2.6.0}/LICENSE +0 -0
  12. {qulab-2.5.5 → qulab-2.6.0}/MANIFEST.in +0 -0
  13. {qulab-2.5.5 → qulab-2.6.0}/QuLab.egg-info/SOURCES.txt +0 -0
  14. {qulab-2.5.5 → qulab-2.6.0}/QuLab.egg-info/dependency_links.txt +0 -0
  15. {qulab-2.5.5 → qulab-2.6.0}/QuLab.egg-info/entry_points.txt +0 -0
  16. {qulab-2.5.5 → qulab-2.6.0}/QuLab.egg-info/requires.txt +0 -0
  17. {qulab-2.5.5 → qulab-2.6.0}/QuLab.egg-info/top_level.txt +0 -0
  18. {qulab-2.5.5 → qulab-2.6.0}/README.md +0 -0
  19. {qulab-2.5.5 → qulab-2.6.0}/pyproject.toml +0 -0
  20. {qulab-2.5.5 → qulab-2.6.0}/qulab/__init__.py +0 -0
  21. {qulab-2.5.5 → qulab-2.6.0}/qulab/__main__.py +0 -0
  22. {qulab-2.5.5 → qulab-2.6.0}/qulab/cli/__init__.py +0 -0
  23. {qulab-2.5.5 → qulab-2.6.0}/qulab/cli/commands.py +0 -0
  24. {qulab-2.5.5 → qulab-2.6.0}/qulab/cli/config.py +0 -0
  25. {qulab-2.5.5 → qulab-2.6.0}/qulab/dicttree.py +0 -0
  26. {qulab-2.5.5 → qulab-2.6.0}/qulab/executor/__init__.py +0 -0
  27. {qulab-2.5.5 → qulab-2.6.0}/qulab/executor/load.py +0 -0
  28. {qulab-2.5.5 → qulab-2.6.0}/qulab/monitor/__init__.py +0 -0
  29. {qulab-2.5.5 → qulab-2.6.0}/qulab/monitor/__main__.py +0 -0
  30. {qulab-2.5.5 → qulab-2.6.0}/qulab/monitor/config.py +0 -0
  31. {qulab-2.5.5 → qulab-2.6.0}/qulab/monitor/dataset.py +0 -0
  32. {qulab-2.5.5 → qulab-2.6.0}/qulab/monitor/event_queue.py +0 -0
  33. {qulab-2.5.5 → qulab-2.6.0}/qulab/monitor/mainwindow.py +0 -0
  34. {qulab-2.5.5 → qulab-2.6.0}/qulab/monitor/monitor.py +0 -0
  35. {qulab-2.5.5 → qulab-2.6.0}/qulab/monitor/ploter.py +0 -0
  36. {qulab-2.5.5 → qulab-2.6.0}/qulab/monitor/qt_compat.py +0 -0
  37. {qulab-2.5.5 → qulab-2.6.0}/qulab/monitor/toolbar.py +0 -0
  38. {qulab-2.5.5 → qulab-2.6.0}/qulab/scan/__init__.py +0 -0
  39. {qulab-2.5.5 → qulab-2.6.0}/qulab/scan/curd.py +0 -0
  40. {qulab-2.5.5 → qulab-2.6.0}/qulab/scan/expression.py +0 -0
  41. {qulab-2.5.5 → qulab-2.6.0}/qulab/scan/models.py +0 -0
  42. {qulab-2.5.5 → qulab-2.6.0}/qulab/scan/optimize.py +0 -0
  43. {qulab-2.5.5 → qulab-2.6.0}/qulab/scan/query.py +0 -0
  44. {qulab-2.5.5 → qulab-2.6.0}/qulab/scan/record.py +0 -0
  45. {qulab-2.5.5 → qulab-2.6.0}/qulab/scan/scan.py +0 -0
  46. {qulab-2.5.5 → qulab-2.6.0}/qulab/scan/server.py +0 -0
  47. {qulab-2.5.5 → qulab-2.6.0}/qulab/scan/space.py +0 -0
  48. {qulab-2.5.5 → qulab-2.6.0}/qulab/scan/utils.py +0 -0
  49. {qulab-2.5.5 → qulab-2.6.0}/qulab/storage/__init__.py +0 -0
  50. {qulab-2.5.5 → qulab-2.6.0}/qulab/storage/__main__.py +0 -0
  51. {qulab-2.5.5 → qulab-2.6.0}/qulab/storage/backend/__init__.py +0 -0
  52. {qulab-2.5.5 → qulab-2.6.0}/qulab/storage/backend/redis.py +0 -0
  53. {qulab-2.5.5 → qulab-2.6.0}/qulab/storage/base_dataset.py +0 -0
  54. {qulab-2.5.5 → qulab-2.6.0}/qulab/storage/chunk.py +0 -0
  55. {qulab-2.5.5 → qulab-2.6.0}/qulab/storage/dataset.py +0 -0
  56. {qulab-2.5.5 → qulab-2.6.0}/qulab/storage/file.py +0 -0
  57. {qulab-2.5.5 → qulab-2.6.0}/qulab/storage/models/__init__.py +0 -0
  58. {qulab-2.5.5 → qulab-2.6.0}/qulab/storage/models/base.py +0 -0
  59. {qulab-2.5.5 → qulab-2.6.0}/qulab/storage/models/config.py +0 -0
  60. {qulab-2.5.5 → qulab-2.6.0}/qulab/storage/models/file.py +0 -0
  61. {qulab-2.5.5 → qulab-2.6.0}/qulab/storage/models/ipy.py +0 -0
  62. {qulab-2.5.5 → qulab-2.6.0}/qulab/storage/models/models.py +0 -0
  63. {qulab-2.5.5 → qulab-2.6.0}/qulab/storage/models/record.py +0 -0
  64. {qulab-2.5.5 → qulab-2.6.0}/qulab/storage/models/report.py +0 -0
  65. {qulab-2.5.5 → qulab-2.6.0}/qulab/storage/models/tag.py +0 -0
  66. {qulab-2.5.5 → qulab-2.6.0}/qulab/storage/storage.py +0 -0
  67. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/__init__.py +0 -0
  68. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/chat.py +0 -0
  69. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/device/__init__.py +0 -0
  70. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/device/basedevice.py +0 -0
  71. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/device/loader.py +0 -0
  72. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/device/utils.py +0 -0
  73. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/drivers/FakeInstrument.py +0 -0
  74. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/drivers/__init__.py +0 -0
  75. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/ipy_events.py +0 -0
  76. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/net/__init__.py +0 -0
  77. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/net/bencoder.py +0 -0
  78. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/net/cli.py +0 -0
  79. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/net/dhcp.py +0 -0
  80. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/net/dhcpd.py +0 -0
  81. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/net/kad.py +0 -0
  82. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/net/kcp.py +0 -0
  83. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/net/nginx.py +0 -0
  84. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/progress.py +0 -0
  85. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/rpc/__init__.py +0 -0
  86. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/rpc/client.py +0 -0
  87. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/rpc/exceptions.py +0 -0
  88. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/rpc/msgpack.py +0 -0
  89. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/rpc/msgpack.pyi +0 -0
  90. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/rpc/router.py +0 -0
  91. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/rpc/rpc.py +0 -0
  92. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/rpc/serialize.py +0 -0
  93. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/rpc/server.py +0 -0
  94. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/rpc/socket.py +0 -0
  95. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/rpc/utils.py +0 -0
  96. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/rpc/worker.py +0 -0
  97. {qulab-2.5.5 → qulab-2.6.0}/qulab/sys/rpc/zmq_socket.py +0 -0
  98. {qulab-2.5.5 → qulab-2.6.0}/qulab/typing.py +0 -0
  99. {qulab-2.5.5 → qulab-2.6.0}/qulab/visualization/__init__.py +0 -0
  100. {qulab-2.5.5 → qulab-2.6.0}/qulab/visualization/__main__.py +0 -0
  101. {qulab-2.5.5 → qulab-2.6.0}/qulab/visualization/_autoplot.py +0 -0
  102. {qulab-2.5.5 → qulab-2.6.0}/qulab/visualization/plot_circ.py +0 -0
  103. {qulab-2.5.5 → qulab-2.6.0}/qulab/visualization/plot_layout.py +0 -0
  104. {qulab-2.5.5 → qulab-2.6.0}/qulab/visualization/plot_seq.py +0 -0
  105. {qulab-2.5.5 → qulab-2.6.0}/qulab/visualization/qdat.py +0 -0
  106. {qulab-2.5.5 → qulab-2.6.0}/qulab/visualization/rot3d.py +0 -0
  107. {qulab-2.5.5 → qulab-2.6.0}/qulab/visualization/widgets.py +0 -0
  108. {qulab-2.5.5 → qulab-2.6.0}/setup.cfg +0 -0
  109. {qulab-2.5.5 → qulab-2.6.0}/setup.py +0 -0
  110. {qulab-2.5.5 → qulab-2.6.0}/src/qulab.h +0 -0
  111. {qulab-2.5.5 → qulab-2.6.0}/tests/test_kad.py +0 -0
  112. {qulab-2.5.5 → qulab-2.6.0}/tests/test_scan.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: QuLab
3
- Version: 2.5.5
3
+ Version: 2.6.0
4
4
  Summary: contral instruments and manage data
5
5
  Author-email: feihoo87 <feihoo87@gmail.com>
6
6
  Maintainer-email: feihoo87 <feihoo87@gmail.com>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: QuLab
3
- Version: 2.5.5
3
+ Version: 2.6.0
4
4
  Summary: contral instruments and manage data
5
5
  Author-email: feihoo87 <feihoo87@gmail.com>
6
6
  Maintainer-email: feihoo87 <feihoo87@gmail.com>
@@ -102,7 +102,7 @@ def set(key, value, api):
102
102
  from . import transform
103
103
  if api is not None:
104
104
  api = importlib.import_module(api)
105
- set_config_api(api.query_config, api.update_config)
105
+ set_config_api(api.query_config, api.update_config, api.export_config)
106
106
  try:
107
107
  value = eval(value)
108
108
  except:
@@ -124,7 +124,7 @@ def get(key, api):
124
124
  from . import transform
125
125
  if api is not None:
126
126
  api = importlib.import_module(api)
127
- set_config_api(api.query_config, api.update_config)
127
+ set_config_api(api.query_config, api.update_config, api.export_config)
128
128
  click.echo(transform.query_config(key))
129
129
 
130
130
 
@@ -147,7 +147,7 @@ def run(workflow, code, data, api, plot, no_dependents, update):
147
147
  )
148
148
  if api is not None:
149
149
  api = importlib.import_module(api)
150
- set_config_api(api.query_config, api.update_config)
150
+ set_config_api(api.query_config, api.update_config, api.export_config)
151
151
  if code is None:
152
152
  code = Path.cwd()
153
153
  if data is None:
@@ -197,7 +197,7 @@ def maintain(workflow, code, data, api, plot):
197
197
  )
198
198
  if api is not None:
199
199
  api = importlib.import_module(api)
200
- set_config_api(api.query_config, api.update_config)
200
+ set_config_api(api.query_config, api.update_config, api.export_config)
201
201
  if code is None:
202
202
  code = Path.cwd()
203
203
  if data is None:
@@ -9,7 +9,7 @@ from loguru import logger
9
9
  from .load import WorkflowType, get_dependents
10
10
  from .storage import (Result, find_result, renew_result, revoke_result,
11
11
  save_result)
12
- from .transform import update_parameters
12
+ from .transform import current_config, update_parameters
13
13
 
14
14
 
15
15
  class CalibrationFailedError(Exception):
@@ -124,7 +124,8 @@ def check_data(workflow: WorkflowType, code_path: str | Path,
124
124
 
125
125
  if history is None:
126
126
  logger.debug(f'No history found for "{workflow.__workflow_id__}"')
127
- result = Result()
127
+ result = Result(workflow=workflow.__workflow_id__,
128
+ config_path=current_config(state_path))
128
129
  result.in_spec = False
129
130
  result.bad_data = False
130
131
  return result
@@ -150,8 +151,9 @@ def check_data(workflow: WorkflowType, code_path: str | Path,
150
151
  raise TypeError(
151
152
  f'"{workflow.__workflow_id__}" : "check" return not pickleable data'
152
153
  )
153
- result = Result()
154
- result.data = data
154
+ result = Result(workflow=workflow.__workflow_id__,
155
+ data=data,
156
+ config_path=current_config(state_path))
155
157
  #save_result(workflow.__workflow_id__, result, state_path)
156
158
 
157
159
  logger.debug(f'Checked "{workflow.__workflow_id__}" !')
@@ -179,8 +181,9 @@ def check_data(workflow: WorkflowType, code_path: str | Path,
179
181
  raise TypeError(
180
182
  f'"{workflow.__workflow_id__}" : "calibrate" return not pickleable data'
181
183
  )
182
- result = Result()
183
- result.data = data
184
+ result = Result(workflow=workflow.__workflow_id__,
185
+ data=data,
186
+ config_path=current_config(state_path))
184
187
  save_result(workflow.__workflow_id__, result, state_path)
185
188
 
186
189
  logger.debug(f'Calibrated "{workflow}" !')
@@ -208,8 +211,9 @@ def calibrate(workflow: WorkflowType, code_path: str | Path,
208
211
  raise TypeError(
209
212
  f'"{workflow.__workflow_id__}" : "calibrate" return not pickleable data'
210
213
  )
211
- result = Result()
212
- result.data = data
214
+ result = Result(workflow=workflow.__workflow_id__,
215
+ data=data,
216
+ config_path=current_config(state_path))
213
217
  save_result(workflow.__workflow_id__, result, state_path)
214
218
  logger.debug(f'Calibrated "{workflow.__workflow_id__}" !')
215
219
  result = call_analyzer(workflow, result, history, check=False, plot=plot)
@@ -271,7 +275,7 @@ def diagnose(workflow: WorkflowType, code_path: str | Path,
271
275
  raise CalibrationFailedError(
272
276
  f'"{workflow.__workflow_id__}": All dependents passed, but calibration failed!'
273
277
  )
274
- update_parameters(result)
278
+ update_parameters(result, state_path)
275
279
  return True
276
280
 
277
281
 
@@ -327,7 +331,7 @@ def maintain(workflow: WorkflowType,
327
331
  f'"{workflow.__workflow_id__}": All dependents passed, but calibration failed!'
328
332
  )
329
333
  if update:
330
- update_parameters(result)
334
+ update_parameters(result, state_path)
331
335
  return
332
336
 
333
337
 
@@ -349,5 +353,5 @@ def run(workflow: WorkflowType,
349
353
  f'"{workflow.__workflow_id__}": All dependents passed, but calibration failed!'
350
354
  )
351
355
  if update:
352
- update_parameters(result)
356
+ update_parameters(result, state_path)
353
357
  return
@@ -14,6 +14,7 @@ from ..cli.config import get_config_value
14
14
 
15
15
  @dataclass
16
16
  class Result():
17
+ workflow: str = ''
17
18
  in_spec: bool = False
18
19
  bad_data: bool = False
19
20
  fully_calibrated: bool = False
@@ -26,6 +27,7 @@ class Result():
26
27
  index: int = -1
27
28
  previous_path: Path | None = None
28
29
  base_path: Path | None = None
30
+ config_path: Path | None = None
29
31
 
30
32
  @property
31
33
  def previous(self):
@@ -46,6 +48,14 @@ class Result():
46
48
  state = 'Outdated'
47
49
  return state
48
50
 
51
+ @property
52
+ def config(self):
53
+ from . import transform
54
+ if self.config_path is not None and self.base_path is not None:
55
+ return transform._load_config(self.config_path, self.base_path)
56
+ else:
57
+ return None
58
+
49
59
  @state.setter
50
60
  def state(self, state: Literal['OK', 'Bad', 'Outdated', 'In spec',
51
61
  'Out of spec', 'Bad data']):
@@ -0,0 +1,122 @@
1
+ import functools
2
+ import hashlib
3
+ import lzma
4
+ import pickle
5
+ from pathlib import Path
6
+
7
+ from .storage import Result
8
+
9
+ __config_id = None
10
+
11
+
12
+ def _query_config(name: str, default=None):
13
+ import pickle
14
+
15
+ try:
16
+ with open('parameters.pkl', 'rb') as f:
17
+ parameters = pickle.load(f)
18
+ except:
19
+ parameters = {}
20
+
21
+ return parameters.get(name, default)
22
+
23
+
24
+ def _update_config(updates):
25
+ import pickle
26
+
27
+ try:
28
+ with open('parameters.pkl', 'rb') as f:
29
+ parameters = pickle.load(f)
30
+ except:
31
+ parameters = {}
32
+
33
+ for k, v in updates.items():
34
+ parameters[k] = v
35
+
36
+ with open('parameters.pkl', 'wb') as f:
37
+ pickle.dump(parameters, f)
38
+
39
+
40
+ def _export_config() -> dict:
41
+ import pickle
42
+
43
+ try:
44
+ with open('parameters.pkl', 'rb') as f:
45
+ parameters = pickle.load(f)
46
+ except:
47
+ parameters = {}
48
+
49
+ return parameters
50
+
51
+
52
+ def update_parameters(result: Result, data_path):
53
+ global __config_id
54
+ update_config(result.parameters)
55
+ cfg = export_config()
56
+ __config_id = _save_config(cfg, data_path)
57
+
58
+
59
+ def current_config(data_path):
60
+ global __config_id
61
+ if __config_id is None:
62
+ cfg = export_config()
63
+ __config_id = _save_config(cfg, data_path)
64
+ return __config_id
65
+
66
+
67
+ def _save_config(cfg, data_path):
68
+ global __config_id
69
+ i = 0
70
+ buf = pickle.dumps(cfg)
71
+ buf = lzma.compress(buf)
72
+ h = hashlib.md5(buf)
73
+
74
+ while True:
75
+ salt = f"{i:08d}".encode()
76
+ h.update(salt)
77
+ hashstr = h.hexdigest()
78
+ cfg_id = Path(hashstr[:2]) / hashstr[2:4] / hashstr[4:]
79
+ path = Path(data_path) / 'config' / cfg_id
80
+ if not path.exists():
81
+ path.parent.mkdir(parents=True, exist_ok=True)
82
+ with open(path, 'wb') as f:
83
+ f.write(buf)
84
+ break
85
+ elif path.read_bytes() == buf:
86
+ break
87
+ i += 1
88
+ __config_id = str(cfg_id)
89
+ return __config_id
90
+
91
+
92
+ @functools.lru_cache(maxsize=1024)
93
+ def _load_config(id, data_path):
94
+ path = Path(data_path) / 'config' / id
95
+ with open(path, 'rb') as f:
96
+ buf = f.read()
97
+ cfg = pickle.loads(lzma.decompress(buf))
98
+ return cfg
99
+
100
+
101
+ query_config = _query_config
102
+ update_config = _update_config
103
+ export_config = _export_config
104
+
105
+
106
+ def set_config_api(query_method, update_method, export_method):
107
+ """
108
+ Set the query and update methods for the config.
109
+
110
+ Args:
111
+ query_method: The query method.
112
+ the method should take a key and return the value.
113
+ update_method: The update method.
114
+ the method should take a dict of updates.
115
+ """
116
+ global query_config, update_config, export_config
117
+
118
+ query_config = query_method
119
+ update_config = update_method
120
+ export_config = export_method
121
+
122
+ return query_config, update_config, export_config
@@ -1,5 +1,6 @@
1
1
  from pathlib import Path
2
2
 
3
+ from ..cli.config import get_config_value
3
4
  from .load import load_workflow
4
5
 
5
6
 
@@ -133,3 +134,23 @@ def check_analyze(result: Result, history: Result | None = None) -> Result:
133
134
 
134
135
  return result
135
136
  """
137
+
138
+
139
+ def debug_analyze(
140
+ result_index: int,
141
+ code_path: str | Path = get_config_value('code_path', Path),
142
+ data_path: str | Path = get_config_value('data_path', Path),
143
+ ) -> None:
144
+ from .storage import get_result_by_index
145
+
146
+ result = get_result_by_index(result_index, data_path)
147
+ if result is None:
148
+ raise ValueError(f'Invalid result index: {result_index}')
149
+ workflow = result.workflow
150
+ wf = load_workflow(workflow, code_path)
151
+ if wf is None:
152
+ raise ValueError(f'Invalid workflow: {workflow}')
153
+ result = wf.analyze(result)
154
+ if hasattr(wf, 'plot'):
155
+ wf.plot(result)
156
+ return result
@@ -0,0 +1 @@
1
+ __version__ = "2.6.0"
@@ -1,55 +0,0 @@
1
- from .storage import Result
2
-
3
-
4
- def _query_config(name: str, default=None):
5
- import pickle
6
-
7
- try:
8
- with open('parameters.pkl', 'rb') as f:
9
- parameters = pickle.load(f)
10
- except:
11
- parameters = {}
12
-
13
- return parameters.get(name, default)
14
-
15
-
16
- def _update_config(updates):
17
- import pickle
18
-
19
- try:
20
- with open('parameters.pkl', 'rb') as f:
21
- parameters = pickle.load(f)
22
- except:
23
- parameters = {}
24
-
25
- for k, v in updates.items():
26
- parameters[k] = v
27
-
28
- with open('parameters.pkl', 'wb') as f:
29
- pickle.dump(parameters, f)
30
-
31
-
32
- def update_parameters(result: Result):
33
- update_config(result.parameters)
34
-
35
-
36
- query_config = _query_config
37
- update_config = _update_config
38
-
39
-
40
- def set_config_api(query_method, update_method):
41
- """
42
- Set the query and update methods for the config.
43
-
44
- Args:
45
- query_method: The query method.
46
- the method should take a key and return the value.
47
- update_method: The update method.
48
- the method should take a dict of updates.
49
- """
50
- global query_config, update_config
51
-
52
- query_config = query_method
53
- update_config = update_method
54
-
55
- return query_config, update_config
@@ -1 +0,0 @@
1
- __version__ = "2.5.5"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes