nsqdriver 0.2.3__py3-none-any.whl → 0.2.5__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.

Potentially problematic release.


This version of nsqdriver might be problematic. Click here for more details.

nsqdriver/NS_MCI.py CHANGED
@@ -336,9 +336,9 @@ class Driver(BaseDriver):
336
336
  _string = [f'*********设备{self.addr}开启成功*********']
337
337
  for key in keys:
338
338
  _string.append(f'{key}: {status.get(key, "nan")}')
339
- for i in range(len(status['rfsoc_addr'])):
340
- _string.append(f'sub_device{status["rfsoc_addr"][i]}: '
341
- f'{status["ref_clock_lock"][i]}{status["ref_clock_from"][i]}')
339
+ # for i in range(len(status['rfsoc_addr'])):
340
+ # _string.append(f'sub_device{status["rfsoc_addr"][i]}: '
341
+ # f'{status["ref_clock_lock"][i]}{status["ref_clock_from"][i]}')
342
342
  print('\n'.join(_string))
343
343
 
344
344
 
nsqdriver/NS_QSYNC.py CHANGED
@@ -54,8 +54,8 @@ def retry(times):
54
54
 
55
55
  class Driver(BaseDriver):
56
56
  class ScannMode(enum.IntEnum):
57
- """
58
- QC/QR等被同步设备的发现方式,'local': 本地共享内存扫描, 'remote': 网络udp扫描
57
+ """!
58
+ @detail QC/QR等被同步设备的发现方式,'local': 本地共享内存扫描, 'remote': 网络udp扫描
59
59
  """
60
60
  local = 0
61
61
  """local: 本地共享内存扫描
@@ -98,6 +98,8 @@ class Driver(BaseDriver):
98
98
  Quantity('ResetTrig', value=None),
99
99
  Quantity('Shot', value=1024, ch=1), # set/get, 运行次数
100
100
  Quantity('TrigPeriod', value=200e-6, ch=1), # set/get, 触发周期
101
+ Quantity('TrigWidth', value=800e-9, ch=1), # set/get, 触发周期
102
+ Quantity('TrigDelay', value=0, ch=1), # set/get, 触发周期
101
103
  Quantity('TrigFrom', value=0, ch=1), # Trig来源: 0:内部产生;1:外部输入
102
104
  Quantity('RefClock', value='out', ch=1), # 参考时钟选择: ‘out’:外参考时钟;‘in’:内参考时钟
103
105
  Quantity('DiscoveryMode', value=ScannMode.local, ch=1), # QC/QR等被同步设备的发现方式,见DiscoveryMode说明
@@ -107,7 +109,9 @@ class Driver(BaseDriver):
107
109
  SystemParameter = {
108
110
  'RefClock': 'out', # 参考时钟选择: ‘out’:外参考时钟;‘in’:内参考时钟
109
111
  'TrigFrom': 0, # Trig来源: 0:内部产生;1:外部输入
110
- 'TrigPeriod': 200e-6,
112
+ 'TrigPeriod': 200e-6, # 触发信号重复周期
113
+ 'TrigWidth': 800e-9, # 触发信号高电平宽度 单位s
114
+ 'TrigDelay': 0, # 触发信号相对开启通知的延迟
111
115
  'DiscoveryMode': ScannMode.local, # QC/QR等被同步设备的发现方式,见DiscoveryMode说明
112
116
  }
113
117
 
@@ -119,7 +123,7 @@ class Driver(BaseDriver):
119
123
  self.gen_trig_num = 0
120
124
  self.addr = addr
121
125
 
122
- self.param = {'shots': 1024, 'period': 200e-6, 'MixMode': 2}
126
+ self.param = {'Shot': 1024, 'period': 200e-6, 'MixMode': 2}
123
127
  print_debug(f'QSYNC: 实例化成功{addr}')
124
128
 
125
129
  @property
@@ -138,9 +142,11 @@ class Driver(BaseDriver):
138
142
  return set()
139
143
 
140
144
  def open(self, **kw):
141
- """
145
+ """!
142
146
  输入IP打开设备,配置默认超时时间为5秒
143
147
  打开设备时配置RFSoC采样时钟,采样时钟以参数定义
148
+ @param kw:
149
+ @return:
144
150
  """
145
151
  # 配置系统初始值
146
152
  system_parameter = kw.get('system_parameter', {})
@@ -175,20 +181,30 @@ class Driver(BaseDriver):
175
181
  return result
176
182
 
177
183
  def set(self, name, value=None, channel=1):
178
- """
184
+ """!
179
185
  设置设备属性
186
+ @param name:
187
+ @param value:
188
+ @param channel:
189
+ @return:
180
190
  """
181
191
  print_debug(f'QSYNC: set操作被调用{name}')
182
192
  if name in {'SystemSync', 'ReInit'}:
183
193
  self.sync_system()
184
194
  elif name == 'TRIG':
185
195
  value = self.param['TrigPeriod']
186
- data = self.__fmt_qsync_start(self.param['TrigFrom'], value, self.param['Shot'])
196
+ data = self.__fmt_qsync_start(
197
+ self.param['TrigFrom'], value, self.param['Shot'],
198
+ self.param['TrigWidth'], self.param['TrigDelay']
199
+ )
187
200
  self._send_command(data, connect_timeout=2)
188
201
  self.gen_trig_num += 1
189
202
  elif name == 'GenerateTrig':
190
203
  value = self.param['TrigPeriod'] if value is None else value
191
- data = self.__fmt_qsync_start(self.param['TrigFrom'], value, self.param['Shot'])
204
+ data = self.__fmt_qsync_start(
205
+ self.param['TrigFrom'], value, self.param['Shot'],
206
+ self.param['TrigWidth'], self.param['TrigDelay']
207
+ )
192
208
  self._send_command(data, connect_timeout=2)
193
209
  self.gen_trig_num += 1
194
210
  elif name == 'ResetTrig':
@@ -203,8 +219,12 @@ class Driver(BaseDriver):
203
219
  self.param[name] = value
204
220
 
205
221
  def get(self, name, channel=1, value=0):
206
- """查询设备属性,获取数据
207
-
222
+ """!
223
+ 查询设备属性,获取数据
224
+ @param name:
225
+ @param channel:
226
+ @param value:
227
+ @return:
208
228
  """
209
229
  print_debug(f'QSYNC: get操作被调用{name}')
210
230
  if name == 'Status':
@@ -250,11 +270,11 @@ class Driver(BaseDriver):
250
270
  self._send_command(data)
251
271
 
252
272
  def _sendto_device(self, cmd_head, timeout=2):
253
- """
273
+ """!
254
274
  将指令发送给设备
255
-
256
- :param cmd_head:
257
- :return:
275
+ @param cmd_head:
276
+ @param timeout:
277
+ @return:
258
278
  """
259
279
  cmd_data = self.__fmt_qsync_common(cmd_head)
260
280
  devices = list(self.device_set)
@@ -283,11 +303,11 @@ class Driver(BaseDriver):
283
303
  return result
284
304
 
285
305
  def _sendto_qsync(self, cmd_head: int):
286
- """
306
+ """!
287
307
  将指令发送给qsync
288
308
 
289
- :param cmd_head:
290
- :return:
309
+ @param cmd_head:
310
+ @return:
291
311
  """
292
312
  cmd_data = self.__fmt_qsync_common(cmd_head)
293
313
  if not self._send_command(cmd_data, connect_timeout=2):
@@ -296,12 +316,12 @@ class Driver(BaseDriver):
296
316
  return True
297
317
 
298
318
  def update_firmware(self, file_path, boards=None):
299
- """
319
+ """!
300
320
  固件更新
301
321
 
302
- :param file_path: 固件路径
303
- :param boards:
304
- :return:
322
+ @param file_path: 固件路径
323
+ @param boards:
324
+ @return:
305
325
  """
306
326
  import os
307
327
  if not os.path.exists(file_path):
@@ -312,12 +332,12 @@ class Driver(BaseDriver):
312
332
  print(f'qsync: 固件更新 执行失败')
313
333
 
314
334
  def _connect(self, addr=None, port=5001, timeout=None):
315
- """
335
+ """!
316
336
  获取到指定ip的tcp连接
317
337
 
318
- :param addr:
319
- :param port:
320
- :return:
338
+ @param addr:
339
+ @param port:
340
+ @return:
321
341
  """
322
342
  timeout = self.timeout if timeout is None else timeout
323
343
  addr = self.addr if addr is None else addr
@@ -329,15 +349,16 @@ class Driver(BaseDriver):
329
349
  @retry(3)
330
350
  def _send_command(self, data: Union[str, bytes], wait=0, addr=None, port=5001,
331
351
  check_feedback=True, return_fdk=False, connect_timeout=10):
332
- """
352
+ """!
333
353
  发送指定内容到后端
334
354
 
335
- :param data: 指令内容
336
- :param wait: 指令发送完成后,等待一段时间再接收反馈,阻塞式等待
337
- :param addr: 后端IP
338
- :param port: 后端端口
339
- :param 是否解析反馈
340
- :return:
355
+ @param data: 指令内容
356
+ @param wait: 指令发送完成后,等待一段时间再接收反馈,阻塞式等待
357
+ @param addr: 后端IP
358
+ @param port: 后端端口
359
+ @param check_feedback: 是否解析反馈
360
+ @param connect_timeout:
361
+ @return:
341
362
  """
342
363
  command_bak = data
343
364
  try:
@@ -400,15 +421,17 @@ class Driver(BaseDriver):
400
421
  return struct.pack('=' + 'I' * len(cmd_pack), *cmd_pack)
401
422
 
402
423
  @lru_cache(maxsize=32)
403
- def __fmt_qsync_start(self, src, period, shots):
424
+ def __fmt_qsync_start(self, src, period, shots, width, delay):
404
425
  cmd_pack = (
405
426
  0x5F5F5F5F,
406
427
  0x41000001,
407
428
  0x00000000,
408
- 28,
429
+ 36,
409
430
  int(src),
410
431
  int(period * 1e9) & 0xFFFFFFFF,
411
- int(shots)
432
+ int(shots),
433
+ int(width * 1e9) & 0xFFFFFFFF,
434
+ int(delay * 1e9) & 0xFFFFFFFF
412
435
  )
413
436
 
414
437
  return struct.pack('=' + 'I' * len(cmd_pack), *cmd_pack)
@@ -433,10 +456,12 @@ class Driver(BaseDriver):
433
456
  self.set('TrigPeriod', 1 / rate)
434
457
  self.set('GenerateTrig')
435
458
 
436
- def BurstMode_init(self, count=2048, delay=200e-6, period=200e-6, **kwds):
459
+ def BurstMode_init(self, count=2048, delay=200e-6, period=200e-6, source=0, **kwds):
437
460
  self.set('ResetTrig')
438
461
  self.set('Shot', count)
439
462
  self.set('TrigPeriod', period)
463
+ self.set('TrigDelay', delay)
464
+ self.set('TrigFrom', source)
440
465
 
441
466
  def startGun(self):
442
467
  self.Trigger_singleshot()
@@ -479,8 +504,8 @@ def do_scanning():
479
504
 
480
505
 
481
506
  class DeviceCmdHandle:
482
- """
483
- 封装与QC/QR设备间的交互
507
+ """!
508
+ @brief 封装与QC/QR设备间的交互
484
509
  """
485
510
  error_map = {b'\x1a\x00\x001': {1: '指令Resync执行失败',
486
511
  2: 'REFCLK not Detected',
@@ -541,17 +566,17 @@ class DeviceCmdHandle:
541
566
  @classmethod
542
567
  def send_command(cls, data: Union[str, bytes], wait=0, addr=None, port=5001,
543
568
  check_feedback=True, return_fdk=False, connect_timeout=None):
544
- """
569
+ """!
545
570
  发送指定内容到后端
546
571
 
547
- :param data: 指令内容
548
- :param wait: 指令发送完成后,等待一段时间再接收反馈,阻塞式等待
549
- :param addr: 后端IP
550
- :param port: 后端端口
551
- :param check_feedback:
552
- :param return_fdk:
553
- :param connect_timeout:
554
- :return:
572
+ @param data: 指令内容
573
+ @param wait: 指令发送完成后,等待一段时间再接收反馈,阻塞式等待
574
+ @param addr: 后端IP
575
+ @param port: 后端端口
576
+ @param check_feedback:
577
+ @param return_fdk:
578
+ @param connect_timeout:
579
+ @return:
555
580
  """
556
581
  command_bak = data
557
582
  try:
nsqdriver/__init__.py CHANGED
@@ -1,7 +1,7 @@
1
1
  from .NS_MCI import Driver as MCIDriver
2
2
  from .NS_QSYNC import Driver as QSYNCDriver
3
3
 
4
- version_pack = (0, 2, 3)
4
+ version_pack = (0, 2, 5)
5
5
 
6
6
  __version__ = '.'.join(str(_) for _ in version_pack)
7
7
  __all__ = ['MCIDriver', 'QSYNCDriver', '__version__']
@@ -0,0 +1,245 @@
1
+ import numpy as np
2
+ from nsqdriver import MCIDriver, QSYNCDriver
3
+
4
+
5
+ class _XYChannel:
6
+ def __init__(self, mci: "DeviceBase", ch=1):
7
+ self.mci = mci
8
+ self.ch = ch
9
+ self.to_zero = np.zeros((16,))
10
+ self.to_one = np.ones((16,))
11
+ self.en = True
12
+ self.mode = 0
13
+ self.off = 0
14
+
15
+ def wave(self, w):
16
+ self.wavex(w, self.ch)
17
+
18
+ def wavex(self, w, idx):
19
+ if np.max(np.abs(w)) < 1e-30:
20
+ wr = np.zeros(16)
21
+ else:
22
+ wr = w
23
+ self.mci.mci_driver.set("Waveform", wr, idx)
24
+
25
+ def arm(self, k=None):
26
+ self.mci.mci_driver.set('PushWaveCache')
27
+
28
+ def trig_del(self, delay):
29
+ ...
30
+
31
+ def output_del(self, delay):
32
+ ...
33
+
34
+ def __del__(self):
35
+ pass
36
+
37
+ def output(self, b):
38
+ self.en = bool(b)
39
+ if not self.en:
40
+ self.mci.mci_driver.set("Waveform", self.to_zero, self.ch)
41
+
42
+ def mode(self, m_):
43
+ ...
44
+
45
+ def offsetx(self, off, idx):
46
+ self.mci.mci_driver.set('Waveform', off*self.to_one, idx)
47
+ self.off = off
48
+
49
+ def offset(self, off):
50
+ self.offsetx(off, self.ch)
51
+
52
+ W = {
53
+ "wave": wave,
54
+ "output": output,
55
+ "trig_del": trig_del,
56
+ "output_del": output_del,
57
+ "mode": mode,
58
+ "offset": offset,
59
+ }
60
+
61
+ Q = {"arm": arm}
62
+
63
+
64
+ class _ZChannel(_XYChannel):
65
+ pass
66
+
67
+
68
+ class _Probe:
69
+ def __init__(self, mci: "DeviceBase", ch=1):
70
+ self.mci = mci
71
+ self.ch = ch
72
+ self.freqList = []
73
+ self.SGS = None # single shot temp cache
74
+ self.AVG = None # average temp cache
75
+ self.depth = 2000
76
+ self._width = 1000
77
+ self.start = 500
78
+ self.demod = 1
79
+ self.averaged_I = np.zeros((16384, )) # 直播直采,相当于只有I路数据
80
+
81
+ def depth(self, depth_):
82
+ self.depth = depth_
83
+ self.mci.mci_driver.set('PointNumber', depth_, self.ch)
84
+
85
+ def demodulation_on(self, demod_):
86
+ self.demod = int(demod_)
87
+
88
+ def start(self, start_):
89
+ self.start = start_
90
+ self.mci.mci_driver.set('TriggerDelay', start_, self.ch)
91
+
92
+ def width(self, width_):
93
+ self._width = width_/4e9
94
+ self.mci.mci_driver.set('PointNumber', width_, self.ch)
95
+
96
+ def freqs(self, *freqList_):
97
+ self.freqList = freqList_
98
+ self.mci.mci_driver.set('FreqList', freqList_, self.ch)
99
+
100
+ def shot(self, _shot):
101
+ self.mci.mci_driver.set('Shot', _shot)
102
+
103
+ def measure(self, k=None):
104
+ self.mci.mci_driver.set('StartCapture')
105
+ if self.demod:
106
+ self.SGS = self.mci.mci_driver.get('IQ', self.ch)
107
+ self.AVG = np.mean(self.SGS, axis=0)
108
+ else:
109
+ self.averaged_I = np.mean(self.mci.mci_driver.get('TraceIQ', self.ch), axis=0)
110
+
111
+ def single_shot(self, k=None):
112
+ return self.SGS
113
+
114
+ def average(self, k=None):
115
+ return self.AVG
116
+
117
+ def trace_I(self, k=None):
118
+ return self.averaged_I
119
+
120
+ def trace_Q(self, k=None):
121
+ return self.averaged_I
122
+
123
+ def __del__(self):
124
+ pass
125
+
126
+ W = {
127
+ "demod": demodulation_on,
128
+ "depth": depth,
129
+ "width": width,
130
+ "start": start,
131
+ "freqs": freqs,
132
+ "shot": shot,
133
+ }
134
+
135
+ Q = {
136
+ "measure": measure,
137
+ "A": average,
138
+ "S": single_shot,
139
+ "traceI": trace_I,
140
+ "traceQ": trace_Q
141
+ };
142
+
143
+
144
+ # one box need one class
145
+ class DeviceBase:
146
+ def __init__(self):
147
+ self.mci_driver = MCIDriver('127.0.0.1')
148
+ self.qsync_driver = QSYNCDriver('127.0.0.1')
149
+
150
+
151
+ class NS_MCI(DeviceBase):
152
+ def __init__(self, addr, srate=10e9, mixmode=2, ref_clk='in'):
153
+ """!
154
+ 此类涉及到系统同步,放到最后实例化
155
+ @param addr: 设备ip
156
+ @param srate: OUT通道采样率
157
+ @param mixmode: 为2时开启OUT通道混合模式,增强第二奈奎斯特区输出
158
+ @param ref_clk: 设备参考信号来源,不接外输出100M时都配置为'in'
159
+ """
160
+ super(NS_MCI, self).__init__()
161
+ self.mci_driver = MCIDriver(addr)
162
+ self.qsync = QSYNCDriver(addr)
163
+ self.srate = srate
164
+ self.mixmode = mixmode
165
+ self.ref_clk = ref_clk
166
+ self.connect()
167
+
168
+ def connect(self):
169
+ mci_params = {'DArate': self.srate, 'MixMode': self.mixmode}
170
+ qsync_params = {'RefClock': self.ref_clk}
171
+
172
+ self.qsync.open(system_parameter=qsync_params)
173
+ self.mci_driver.open(system_parameter=mci_params)
174
+ self.qsync.sync_system()
175
+
176
+ self.mci_driver.set('EnableWaveCache', True)
177
+
178
+ for _ch in range(22):
179
+ xy_ch = _ch+1
180
+ setattr(self, f'OUT{xy_ch}', _XYChannel(self, xy_ch))
181
+ for _ch in range(2):
182
+ probe_ch = _ch+1
183
+ setattr(self, f'IN{probe_ch}', _Probe(self, probe_ch))
184
+
185
+ def trig_interval(self, interval):
186
+ self.interval = interval
187
+ self.qsync.set('TrigPeriod', int(interval))
188
+
189
+ def trig_count(self, count_):
190
+ self.qsync.set('Shot', int(count_))
191
+
192
+ def trig(self):
193
+ self.qsync.set('GenerateTrig', self.interval)
194
+
195
+ def awg_arm(self):
196
+ self.mci_driver.set('PushWaveCache')
197
+
198
+ def __del__(self):
199
+ pass
200
+
201
+ W = {
202
+ "trig_interval": trig_interval,
203
+ "trig_count": trig_count,
204
+ "connect": connect,
205
+ "trig": trig,
206
+ "awg_arm": awg_arm,
207
+ }
208
+
209
+ Q = {
210
+ }
211
+
212
+
213
+ class NS_Z(DeviceBase):
214
+ def __init__(self, addr, mixmode=2):
215
+ """!
216
+ 此类负责控制24 Z OUT通道的设备,采样率固定为2Gsps,mixmode固定为1
217
+ @param addr: 设备ip
218
+ @param mixmode: 为1时关闭OUT通道混合模式
219
+ """
220
+ super(NS_Z, self).__init__()
221
+ self.mci_driver = MCIDriver(addr)
222
+ self.qsync = QSYNCDriver(addr)
223
+ self.srate = 2e9
224
+ self.mixmode = 1
225
+ self.connect()
226
+
227
+ def connect(self):
228
+ mci_params = {'DArate': self.srate, 'MixMode': self.mixmode}
229
+ self.mci_driver.open(system_parameter=mci_params)
230
+
231
+ self.mci_driver.set('EnableWaveCache', True)
232
+
233
+ for _ch in range(24):
234
+ xy_ch = _ch+1
235
+ setattr(self, f'OUT{xy_ch}', _ZChannel(self, xy_ch))
236
+
237
+ def awg_arm(self):
238
+ self.mci_driver.set('PushWaveCache')
239
+
240
+ W = {
241
+ "connect": connect,
242
+ }
243
+
244
+ Q = {
245
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nsqdriver
3
- Version: 0.2.3
3
+ Version: 0.2.5
4
4
  Summary: Naishu Q series quantum measurement and control equipment driver interface
5
5
  Home-page: https://g2hoyqcmh4.feishu.cn/wiki/wikcnzvyMd82DLZUe2NsI6HxsFc
6
6
  Author: Naishu Technology
@@ -0,0 +1,12 @@
1
+ nsqdriver/NS_MCI.py,sha256=42w7Oj15Nq7bG4oZnyXUD2dDFyqsKA4rpaQDAIXQ5h0,19233
2
+ nsqdriver/NS_QSYNC.py,sha256=P5BDiTz7hu6omwFnjGfGXfnzAoBfrvGYAYLTT45RoOc,22747
3
+ nsqdriver/__init__.py,sha256=cBgsySikxDbYiCaL6hMnLaDQcRKzP6nkL0cPXwpajOo,218
4
+ nsqdriver/common.py,sha256=IHfShqgNN3THbe7KD7ICdfFY7JKC_kQj0_KJk-449gQ,499
5
+ nsqdriver/setup.py,sha256=4ajKQtY4hr2240f5sA81f66_92Yp_wG6gPM-zsOWq9M,390
6
+ nsqdriver/wrapper/AWG_ADC.py,sha256=8K5xLEa_3CKnStWcoJeTj8ufEQfrx6o4l4XGNuOP3Ug,19211
7
+ nsqdriver/wrapper/ND_NSMCI.py,sha256=gTyrDObhbggl35V_q-kpDoPsfttIEnDFc6f0-pk_P0k,6288
8
+ nsqdriver/wrapper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ nsqdriver-0.2.5.dist-info/METADATA,sha256=bt2XXWj4XGSbXAZeWO8hqQq6WMUgSSGceaeFjVQ2x8g,596
10
+ nsqdriver-0.2.5.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
11
+ nsqdriver-0.2.5.dist-info/top_level.txt,sha256=o7EbQoFO6BoaG3KGbS9Lg_aRheZSY5KYzoYuI9vx-AI,10
12
+ nsqdriver-0.2.5.dist-info/RECORD,,
@@ -1,11 +0,0 @@
1
- nsqdriver/NS_MCI.py,sha256=9UhDyEdnoe2pLXzOMqZqHBbwLlY9Vtv572fnet5il-I,19227
2
- nsqdriver/NS_QSYNC.py,sha256=9LsT-O3asvpDno8W9y7fVyA5MKRsO79H1UEqIPGOKsc,21753
3
- nsqdriver/__init__.py,sha256=ryKIcb2l_iw4KrhuWU_dTmoCp9hLRm3d2XzagEdH8zU,218
4
- nsqdriver/common.py,sha256=IHfShqgNN3THbe7KD7ICdfFY7JKC_kQj0_KJk-449gQ,499
5
- nsqdriver/setup.py,sha256=4ajKQtY4hr2240f5sA81f66_92Yp_wG6gPM-zsOWq9M,390
6
- nsqdriver/wrapper/AWG_ADC.py,sha256=8K5xLEa_3CKnStWcoJeTj8ufEQfrx6o4l4XGNuOP3Ug,19211
7
- nsqdriver/wrapper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- nsqdriver-0.2.3.dist-info/METADATA,sha256=6nAvOX7mK5ys-BFn_GkAtJAjzLIdWxOoyLxJgM20X7I,596
9
- nsqdriver-0.2.3.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
10
- nsqdriver-0.2.3.dist-info/top_level.txt,sha256=o7EbQoFO6BoaG3KGbS9Lg_aRheZSY5KYzoYuI9vx-AI,10
11
- nsqdriver-0.2.3.dist-info/RECORD,,