nebu 0.1.120__py3-none-any.whl → 0.1.122__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.
@@ -471,39 +471,39 @@ def check_health_subprocess() -> bool:
471
471
  """Check if the health subprocess is still running and restart if needed."""
472
472
  global health_subprocess
473
473
 
474
- print(f"[DEBUG] check_health_subprocess called")
474
+ # print(f"[DEBUG] check_health_subprocess called")
475
475
 
476
476
  if health_subprocess is None:
477
- print(f"[DEBUG] health_subprocess is None")
477
+ # print(f"[DEBUG] health_subprocess is None")
478
478
  return False
479
479
 
480
480
  # Cat the health subprocess log file
481
- try:
482
- log_dir = os.path.join(os.getcwd(), "logs")
483
- log_file = os.path.join(log_dir, f"health_consumer_{health_subprocess.pid}.log")
484
-
485
- if os.path.exists(log_file):
486
- print(
487
- f"[DEBUG] === HEALTH SUBPROCESS LOG (PID {health_subprocess.pid}) ==="
488
- )
489
- try:
490
- with open(log_file, "r") as f:
491
- log_contents = f.read()
492
- if log_contents.strip():
493
- print(log_contents)
494
- else:
495
- print("[DEBUG] Log file is empty")
496
- except Exception as e:
497
- print(f"[DEBUG] Error reading log file {log_file}: {e}")
498
- print(f"[DEBUG] === END HEALTH SUBPROCESS LOG ===")
499
- else:
500
- print(f"[DEBUG] Health subprocess log file not found: {log_file}")
501
- except Exception as e:
502
- print(f"[DEBUG] Error accessing health subprocess log: {e}")
481
+ # try:
482
+ # log_dir = os.path.join(os.getcwd(), "logs")
483
+ # log_file = os.path.join(log_dir, f"health_consumer_{health_subprocess.pid}.log")
484
+
485
+ # if os.path.exists(log_file):
486
+ # print(
487
+ # f"[DEBUG] === HEALTH SUBPROCESS LOG (PID {health_subprocess.pid}) ==="
488
+ # )
489
+ # try:
490
+ # with open(log_file, "r") as f:
491
+ # log_contents = f.read()
492
+ # if log_contents.strip():
493
+ # print(log_contents)
494
+ # else:
495
+ # print("[DEBUG] Log file is empty")
496
+ # except Exception as e:
497
+ # print(f"[DEBUG] Error reading log file {log_file}: {e}")
498
+ # print(f"[DEBUG] === END HEALTH SUBPROCESS LOG ===")
499
+ # else:
500
+ # print(f"[DEBUG] Health subprocess log file not found: {log_file}")
501
+ # except Exception as e:
502
+ # print(f"[DEBUG] Error accessing health subprocess log: {e}")
503
503
 
504
504
  # Check if process is still running
505
505
  poll_result = health_subprocess.poll()
506
- print(f"[DEBUG] health_subprocess.poll() returned: {poll_result}")
506
+ # print(f"[DEBUG] health_subprocess.poll() returned: {poll_result}")
507
507
 
508
508
  if poll_result is None:
509
509
  print(f"[DEBUG] Health subprocess still running (PID {health_subprocess.pid})")
@@ -511,29 +511,29 @@ def check_health_subprocess() -> bool:
511
511
 
512
512
  # Process has exited
513
513
  exit_code = health_subprocess.returncode
514
- print(f"[DEBUG] Health subprocess exited with code {exit_code}")
514
+ # print(f"[DEBUG] Health subprocess exited with code {exit_code}")
515
515
  logger.warning(
516
516
  f"[Consumer] Health subprocess exited with code {exit_code}. Restarting..."
517
517
  )
518
518
 
519
519
  # Start a new health subprocess
520
- print(f"[DEBUG] Attempting to restart health subprocess...")
520
+ # print(f"[DEBUG] Attempting to restart health subprocess...")
521
521
  health_subprocess = start_health_check_subprocess()
522
522
 
523
523
  if health_subprocess:
524
- print(f"[DEBUG] Health subprocess restarted successfully")
524
+ # print(f"[DEBUG] Health subprocess restarted successfully")
525
525
  # Start monitoring thread for the new subprocess
526
526
  monitor_thread = threading.Thread(
527
527
  target=monitor_health_subprocess, args=(health_subprocess,), daemon=True
528
528
  )
529
529
  monitor_thread.start()
530
- print(f"[DEBUG] Monitor thread started for health subprocess")
530
+ # print(f"[DEBUG] Monitor thread started for health subprocess")
531
531
  logger.info(
532
532
  "[Consumer] Health subprocess restarted and monitoring thread started."
533
533
  )
534
534
  return True
535
535
  else:
536
- print(f"[DEBUG] Failed to restart health subprocess")
536
+ # print(f"[DEBUG] Failed to restart health subprocess")
537
537
  logger.error("[Consumer] Failed to restart health subprocess.")
538
538
  return False
539
539
 
@@ -51,11 +51,11 @@ def process_health_check_message(
51
51
  health_group: str,
52
52
  ) -> None:
53
53
  """Processes a single health check message."""
54
- print(f"[HEALTH DEBUG] === PROCESSING HEALTH CHECK MESSAGE ===")
55
- print(f"[HEALTH DEBUG] Message ID: {message_id}")
56
- print(f"[HEALTH DEBUG] Message data: {message_data}")
57
- print(f"[HEALTH DEBUG] Health stream: {health_stream}")
58
- print(f"[HEALTH DEBUG] Health group: {health_group}")
54
+ # print(f"[HEALTH DEBUG] === PROCESSING HEALTH CHECK MESSAGE ===")
55
+ # print(f"[HEALTH DEBUG] Message ID: {message_id}")
56
+ # print(f"[HEALTH DEBUG] Message data: {message_data}")
57
+ # print(f"[HEALTH DEBUG] Health stream: {health_stream}")
58
+ # print(f"[HEALTH DEBUG] Health group: {health_group}")
59
59
 
60
60
  logger.info(f"Processing health check message {message_id}: {message_data}")
61
61
 
@@ -64,33 +64,33 @@ def process_health_check_message(
64
64
  details: Optional[Dict[str, Any]] = None
65
65
  return_stream: Optional[str] = None
66
66
  original_message_id: Optional[str] = None
67
- user_id: Optional[str] = None
67
+ # user_id: Optional[str] = None
68
68
 
69
69
  try:
70
70
  if "data" in message_data:
71
- print(f"[HEALTH DEBUG] Found 'data' field in message")
71
+ # print(f"[HEALTH DEBUG] Found 'data' field in message")
72
72
  data_str = message_data["data"]
73
73
  print(f"[HEALTH DEBUG] Raw data string: {data_str}")
74
74
 
75
75
  data = json.loads(data_str)
76
- print(f"[HEALTH DEBUG] Parsed data: {json.dumps(data, indent=2)}")
76
+ # print(f"[HEALTH DEBUG] Parsed data: {json.dumps(data, indent=2)}")
77
77
  logger.info(f"Health check data: {data}")
78
78
 
79
79
  # Extract important fields from the forwarded message
80
80
  return_stream = data.get("return_stream")
81
81
  original_message_id = data.get("original_message_id")
82
- user_id = data.get("user_id")
83
- inner_kind = data.get("kind")
82
+ # user_id = data.get("user_id")
83
+ # inner_kind = data.get("kind")
84
84
  inner_id = data.get("id")
85
85
  content = data.get("content")
86
86
 
87
- print(f"[HEALTH DEBUG] Extracted fields:")
88
- print(f"[HEALTH DEBUG] return_stream: {return_stream}")
89
- print(f"[HEALTH DEBUG] original_message_id: {original_message_id}")
90
- print(f"[HEALTH DEBUG] user_id: {user_id}")
91
- print(f"[HEALTH DEBUG] inner_kind: {inner_kind}")
92
- print(f"[HEALTH DEBUG] inner_id: {inner_id}")
93
- print(f"[HEALTH DEBUG] content: {content}")
87
+ # print(f"[HEALTH DEBUG] Extracted fields:")
88
+ # print(f"[HEALTH DEBUG] return_stream: {return_stream}")
89
+ # print(f"[HEALTH DEBUG] original_message_id: {original_message_id}")
90
+ # print(f"[HEALTH DEBUG] user_id: {user_id}")
91
+ # print(f"[HEALTH DEBUG] inner_kind: {inner_kind}")
92
+ # print(f"[HEALTH DEBUG] inner_id: {inner_id}")
93
+ # print(f"[HEALTH DEBUG] content: {content}")
94
94
 
95
95
  # Update details with health check info
96
96
  details = {
@@ -101,12 +101,13 @@ def process_health_check_message(
101
101
 
102
102
  if content and isinstance(content, dict):
103
103
  details.update({"check_content": content})
104
- print(f"[HEALTH DEBUG] Added check_content to details")
104
+ # print(f"[HEALTH DEBUG] Added check_content to details")
105
105
  else:
106
- print(f"[HEALTH DEBUG] No 'data' field found in message_data")
106
+ # print(f"[HEALTH DEBUG] No 'data' field found in message_data")
107
+ pass
107
108
 
108
109
  except (json.JSONDecodeError, KeyError) as e:
109
- print(f"[HEALTH DEBUG] ERROR parsing message data: {e}")
110
+ # print(f"[HEALTH DEBUG] ERROR parsing message data: {e}")
110
111
  logger.warning(f"Could not parse health check message data: {e}")
111
112
  health_status = "error"
112
113
  health_message = f"Failed to parse health check message data: {e}"
@@ -126,16 +127,16 @@ def process_health_check_message(
126
127
 
127
128
  # Send the response to the return stream in the format expected by the system
128
129
  if return_stream:
129
- print(
130
- f"[HEALTH DEBUG] Sending V1ProcessorHealthResponse to return_stream: {return_stream}"
131
- )
130
+ # print(
131
+ # f"[HEALTH DEBUG] Sending V1ProcessorHealthResponse to return_stream: {return_stream}"
132
+ # )
132
133
  try:
133
134
  # Send the V1ProcessorHealthResponse directly (not wrapped in StreamResponseMessage)
134
135
  response_data = health_response.model_dump()
135
136
 
136
- print(
137
- f"[HEALTH DEBUG] Sending V1ProcessorHealthResponse directly: {json.dumps(response_data, indent=2)}"
138
- )
137
+ # print(
138
+ # f"[HEALTH DEBUG] Sending V1ProcessorHealthResponse directly: {json.dumps(response_data, indent=2)}"
139
+ # )
139
140
 
140
141
  # Send to return stream
141
142
  redis_conn.xadd(
@@ -144,38 +145,39 @@ def process_health_check_message(
144
145
  maxlen=1000,
145
146
  approximate=True,
146
147
  )
147
- print(
148
- f"[HEALTH DEBUG] V1ProcessorHealthResponse sent successfully to {return_stream}"
149
- )
148
+ # print(
149
+ # f"[HEALTH DEBUG] V1ProcessorHealthResponse sent successfully to {return_stream}"
150
+ # )
150
151
  logger.info(
151
152
  f"Sent health response for {message_id} to stream: {return_stream}"
152
153
  )
153
154
  except Exception as e_resp_send:
154
- print(f"[HEALTH DEBUG] ERROR sending response: {e_resp_send}")
155
+ # print(f"[HEALTH DEBUG] ERROR sending response: {e_resp_send}")
155
156
  logger.error(
156
157
  f"Failed to send health response for {message_id} to stream {return_stream}: {e_resp_send}"
157
158
  )
158
159
  else:
159
- print(f"[HEALTH DEBUG] No return_stream specified, not sending response")
160
+ # print(f"[HEALTH DEBUG] No return_stream specified, not sending response")
161
+ pass
160
162
 
161
163
  # Acknowledge the health check message
162
- print(f"[HEALTH DEBUG] Acknowledging message {message_id}")
164
+ # print(f"[HEALTH DEBUG] Acknowledging message {message_id}")
163
165
  try:
164
166
  redis_conn.xack(health_stream, health_group, message_id)
165
- print(f"[HEALTH DEBUG] Message {message_id} acknowledged successfully")
167
+ # print(f"[HEALTH DEBUG] Message {message_id} acknowledged successfully")
166
168
  logger.info(f"Acknowledged health check message {message_id}")
167
169
  except Exception as e_ack:
168
- print(f"[HEALTH DEBUG] ERROR acknowledging message: {e_ack}")
170
+ # print(f"[HEALTH DEBUG] ERROR acknowledging message: {e_ack}")
169
171
  logger.error(
170
172
  f"Failed to acknowledge health check message {message_id}: {e_ack}"
171
173
  )
172
174
 
173
- print(f"[HEALTH DEBUG] === FINISHED PROCESSING HEALTH CHECK MESSAGE ===")
175
+ # print(f"[HEALTH DEBUG] === FINISHED PROCESSING HEALTH CHECK MESSAGE ===")
174
176
 
175
177
 
176
178
  def main():
177
179
  """Main function for the health check consumer subprocess."""
178
- print(f"[HEALTH DEBUG] === HEALTH WORKER STARTING ===")
180
+ # print(f"[HEALTH DEBUG] === HEALTH WORKER STARTING ===")
179
181
  logger = setup_health_logging()
180
182
 
181
183
  # Get environment variables
@@ -183,10 +185,10 @@ def main():
183
185
  health_stream = os.environ.get("REDIS_HEALTH_STREAM")
184
186
  health_group = os.environ.get("REDIS_HEALTH_CONSUMER_GROUP")
185
187
 
186
- print(f"[HEALTH DEBUG] Environment variables:")
187
- print(f"[HEALTH DEBUG] REDIS_URL: {redis_url}")
188
- print(f"[HEALTH DEBUG] REDIS_HEALTH_STREAM: {health_stream}")
189
- print(f"[HEALTH DEBUG] REDIS_HEALTH_CONSUMER_GROUP: {health_group}")
188
+ # print(f"[HEALTH DEBUG] Environment variables:")
189
+ # print(f"[HEALTH DEBUG] REDIS_URL: {redis_url}")
190
+ # print(f"[HEALTH DEBUG] REDIS_HEALTH_STREAM: {health_stream}")
191
+ # print(f"[HEALTH DEBUG] REDIS_HEALTH_CONSUMER_GROUP: {health_group}")
190
192
 
191
193
  if not all([redis_url, health_stream, health_group]):
192
194
  print(f"[HEALTH DEBUG] ERROR: Missing required environment variables")
@@ -208,56 +210,58 @@ def main():
208
210
  )
209
211
 
210
212
  # Configure SOCKS proxy
211
- print(f"[HEALTH DEBUG] Configuring SOCKS proxy...")
213
+ # print(f"[HEALTH DEBUG] Configuring SOCKS proxy...")
212
214
  socks.set_default_proxy(socks.SOCKS5, "localhost", 1055)
213
215
  socket.socket = socks.socksocket
214
216
  logger.info("Configured SOCKS5 proxy for socket connections via localhost:1055")
215
217
 
216
218
  health_redis_conn: Optional[redis.Redis] = None
217
219
  health_consumer_name = f"health-consumer-{os.getpid()}-{socket.gethostname()}"
218
- print(f"[HEALTH DEBUG] Health consumer name: {health_consumer_name}")
220
+ # print(f"[HEALTH DEBUG] Health consumer name: {health_consumer_name}")
219
221
 
220
- print(f"[HEALTH DEBUG] === ENTERING MAIN LOOP ===")
222
+ # print(f"[HEALTH DEBUG] === ENTERING MAIN LOOP ===")
221
223
  while True:
222
224
  try:
223
225
  if health_redis_conn is None:
224
- print(f"[HEALTH DEBUG] Connecting to Redis for health stream...")
226
+ # print(f"[HEALTH DEBUG] Connecting to Redis for health stream...")
225
227
  logger.info("Connecting to Redis for health stream...")
228
+
226
229
  health_redis_conn = redis.from_url(redis_url, decode_responses=True)
227
230
  health_redis_conn.ping()
228
- print(f"[HEALTH DEBUG] Connected to Redis successfully")
231
+ # print(f"[HEALTH DEBUG] Connected to Redis successfully")
229
232
  logger.info("Connected to Redis for health stream.")
230
233
 
231
234
  # Create health consumer group if it doesn't exist
232
- print(f"[HEALTH DEBUG] Creating/checking consumer group...")
235
+ # print(f"[HEALTH DEBUG] Creating/checking consumer group...")
236
+ logger.info("Creating/checking consumer group...")
233
237
  try:
234
238
  health_redis_conn.xgroup_create(
235
239
  health_stream, health_group, id="0", mkstream=True
236
240
  )
237
- print(
238
- f"[HEALTH DEBUG] Created consumer group {health_group} for stream {health_stream}"
239
- )
241
+ # print(
242
+ # f"[HEALTH DEBUG] Created consumer group {health_group} for stream {health_stream}"
243
+ # )
240
244
  logger.info(
241
245
  f"Created consumer group {health_group} for stream {health_stream}"
242
246
  )
243
247
  except ResponseError as e_group:
244
248
  if "BUSYGROUP" in str(e_group):
245
- print(
246
- f"[HEALTH DEBUG] Consumer group {health_group} already exists"
247
- )
249
+ # print(
250
+ # f"[HEALTH DEBUG] Consumer group {health_group} already exists"
251
+ # )
248
252
  logger.info(f"Consumer group {health_group} already exists.")
249
253
  else:
250
- print(
251
- f"[HEALTH DEBUG] ERROR creating health consumer group: {e_group}"
252
- )
254
+ # print(
255
+ # f"[HEALTH DEBUG] ERROR creating health consumer group: {e_group}"
256
+ # )
253
257
  logger.error(f"Error creating health consumer group: {e_group}")
254
258
  time.sleep(5)
255
259
  health_redis_conn = None
256
260
  continue
257
261
  except Exception as e_group_other:
258
- print(
259
- f"[HEALTH DEBUG] UNEXPECTED ERROR creating health consumer group: {e_group_other}"
260
- )
262
+ # print(
263
+ # f"[HEALTH DEBUG] UNEXPECTED ERROR creating health consumer group: {e_group_other}"
264
+ # )
261
265
  logger.error(
262
266
  f"Unexpected error creating health consumer group: {e_group_other}"
263
267
  )
@@ -268,7 +272,8 @@ def main():
268
272
  # Read from health stream
269
273
  assert health_redis_conn is not None
270
274
 
271
- print(f"[HEALTH DEBUG] Reading from health stream {health_stream}...")
275
+ # print(f"[HEALTH DEBUG] Reading from health stream {health_stream}...")
276
+ logger.info(f"Reading from health stream {health_stream}...")
272
277
  health_streams_arg: Dict[str, object] = {health_stream: ">"}
273
278
  raw_messages = health_redis_conn.xreadgroup(
274
279
  health_group,
@@ -278,21 +283,26 @@ def main():
278
283
  block=5000, # Block for 5 seconds
279
284
  )
280
285
 
281
- print(f"[HEALTH DEBUG] xreadgroup returned: {raw_messages}")
282
- print(f"[HEALTH DEBUG] Messages type: {type(raw_messages)}")
286
+ # print(f"[HEALTH DEBUG] xreadgroup returned: {raw_messages}")
287
+ # print(f"[HEALTH DEBUG] Messages type: {type(raw_messages)}")
283
288
 
284
289
  if raw_messages:
285
- print(f"[HEALTH DEBUG] Found messages to process")
290
+ # print(f"[HEALTH DEBUG] Found messages to process")
291
+ logger.info("Found messages to process")
286
292
  # Cast to expected type for decode_responses=True
287
293
  messages = cast(
288
294
  List[Tuple[str, List[Tuple[str, Dict[str, str]]]]], raw_messages
289
295
  )
290
296
  for stream_name, stream_messages in messages:
291
- print(
292
- f"[HEALTH DEBUG] Processing stream: {stream_name} with {len(stream_messages)} message(s)"
297
+ # print(
298
+ # f"[HEALTH DEBUG] Processing stream: {stream_name} with {len(stream_messages)} message(s)"
299
+ # )
300
+ logger.info(
301
+ f"Processing stream: {stream_name} with {len(stream_messages)} message(s)"
293
302
  )
294
303
  for message_id, message_data in stream_messages:
295
- print(f"[HEALTH DEBUG] Processing message {message_id}")
304
+ # print(f"[HEALTH DEBUG] Processing message {message_id}")
305
+ logger.info(f"Processing message {message_id}")
296
306
  process_health_check_message(
297
307
  message_id,
298
308
  message_data,
@@ -302,7 +312,8 @@ def main():
302
312
  health_group,
303
313
  )
304
314
  else:
305
- print(f"[HEALTH DEBUG] No messages received (timeout)")
315
+ # print(f"[HEALTH DEBUG] No messages received (timeout)")
316
+ logger.info("No messages received (timeout)")
306
317
 
307
318
  except (ConnectionError, RedisTimeoutError, TimeoutError) as e_conn:
308
319
  logger.error(f"Redis connection error: {e_conn}. Reconnecting in 5s...")
@@ -283,6 +283,7 @@ class Processor(Generic[InputType, OutputType]):
283
283
  """
284
284
  Send data to the processor and optionally stream logs in the background.
285
285
  """
286
+ print("sending data to processor: ", data)
286
287
  if (
287
288
  not self.processor
288
289
  or not self.processor.metadata.name
@@ -314,14 +315,14 @@ class Processor(Generic[InputType, OutputType]):
314
315
  response.raise_for_status()
315
316
  raw_response_json = response.json()
316
317
 
318
+ print(f">>> Raw response JSON: {raw_response_json}")
319
+
317
320
  if "error" in raw_response_json:
321
+ print("error in raw_response_json")
318
322
  raise Exception(raw_response_json["error"])
319
323
 
320
- if "status" in raw_response_json:
321
- return raw_response_json
322
-
323
324
  raw_content = raw_response_json.get("content")
324
- logger.debug(f">>> Raw content: {raw_content}")
325
+ print(f">>> Raw content: {raw_content}")
325
326
 
326
327
  # --- Fetch Logs (if requested and not already running) ---
327
328
  if logs:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nebu
3
- Version: 0.1.120
3
+ Version: 0.1.122
4
4
  Summary: A globally distributed container runtime
5
5
  Requires-Python: >=3.10.14
6
6
  Description-Content-Type: text/markdown
@@ -13,17 +13,17 @@ nebu/containers/container.py,sha256=Mrh_gvMsTvDkj3CwpqIPzJ72IMw0gQIg64y548vq0yg,
13
13
  nebu/containers/models.py,sha256=0j6NGy4yto-enRDh_4JH_ZTbHrLdSpuMOqNQPnIrwC4,6815
14
14
  nebu/namespaces/models.py,sha256=EqUOpzhVBhvJw2P92ONDUbIgC31M9jMmcaG5vyOrsWg,497
15
15
  nebu/namespaces/namespace.py,sha256=oeZyGqsIGIrppyjif1ZONsdTmqRgd9oSLFE1BChXTTE,5247
16
- nebu/processors/consumer.py,sha256=19f7BpNZXmeJSDmYmfX8mVFUZzd_vUI5bMI1alpDIvc,78483
17
- nebu/processors/consumer_health_worker.py,sha256=7qT3Iu3aUoPqg0Doy-MWN7RMpoS1yXljLMaF3QikF2M,14483
16
+ nebu/processors/consumer.py,sha256=RoQqpE8ee7-dV68dYLZTX3c7W373txNs7qsJF-NK8Oo,78541
17
+ nebu/processors/consumer_health_worker.py,sha256=wC3sDOFf6VNHmw_tuYoN1ICknmk0VaX4_pBtr3c1bLQ,15134
18
18
  nebu/processors/consumer_process_worker.py,sha256=h--eNFKaLbUayxn88mB8oGGdrU2liE1dnwm_TPlewX8,36960
19
19
  nebu/processors/decorate.py,sha256=5p9pQrk_H8-Fj0UjsgSVCYx7Jk7KFuhMZtNhkKvpmkQ,61306
20
20
  nebu/processors/default.py,sha256=cy4ETMdbdRGkrvbYec1o60h7mGDlGN5JsuUph0ENtDU,364
21
21
  nebu/processors/models.py,sha256=8-TmKha2_QAnPlXcZxYjrCSPDCX7FFcMDMcHK77jK0U,4223
22
- nebu/processors/processor.py,sha256=APzvh4wB97pazl0SJewJEfi8sjQzQAMXZjtONNjaF_0,26081
22
+ nebu/processors/processor.py,sha256=wos5BkNZUVaY5ifT7yeDLbJkdfeloJ7hRuK9P18LU7U,26155
23
23
  nebu/redis/models.py,sha256=coPovAcVXnOU1Xh_fpJL4PO3QctgK9nBe5QYoqEcnxg,1230
24
24
  nebu/services/service.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
- nebu-0.1.120.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
26
- nebu-0.1.120.dist-info/METADATA,sha256=SKNf4PIhc1Stx6bHBxGQ7CbZCNsK34FntOaHgJiZRQ0,1798
27
- nebu-0.1.120.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
28
- nebu-0.1.120.dist-info/top_level.txt,sha256=uLIbEKJeGSHWOAJN5S0i5XBGwybALlF9bYoB1UhdEgQ,5
29
- nebu-0.1.120.dist-info/RECORD,,
25
+ nebu-0.1.122.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
26
+ nebu-0.1.122.dist-info/METADATA,sha256=PKvcKsR_xuYgqq2ibnHoDGcsZSz1POQdYswJp_xWkRM,1798
27
+ nebu-0.1.122.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
28
+ nebu-0.1.122.dist-info/top_level.txt,sha256=uLIbEKJeGSHWOAJN5S0i5XBGwybALlF9bYoB1UhdEgQ,5
29
+ nebu-0.1.122.dist-info/RECORD,,
File without changes